임의의 객체타입을 만들어 보자.
이것은 class가 될 수도 있고 struct등의 구조체 일 수도 있다.

편의상 struct로 예제코드를 한번 만들어 보겠다.

< 보내는 쪽 >
struct A
{
int rank[20];      // int형은 4byte이므로 전체 80byte
char  name[20];  //char형은 1byte이므로 전체 20byte
};  // 즉 이 구조체가 가지는 메모리 용량은 총 100byte

A a; // 타입 선언

// 전송할 값을 채워 넣는다~~~~ 소켓을 연다

// Send Data
 // ================= 방법 1 
write( (char *) &a, sizeof(A) );  // 포트에 적는다. (char *) 캐스팅에 주목하자
 // ================= 방법 2
char sendData[100];
memcpy(sendData,&a,sizeof(A) ); // 메모리 내용 복사.
write( sendData, sizeof(A) );
 

< 받는 쪽>
// 물론 같은 형식의 객체가 선언 되어있을 것이다.
A receivedData;  // 객체 선언
read( &receivedData, sizeof(A) ); // 간단히 수신.!!!
Posted by jsilva

이건 정말 엄청난 사실이었다..
메모리를 공유하게 해주는 struct가 있었다니 !!!!
그건 바로 union type!!!
char 는 변수 하나당 1 byte
float 와 int  는 변수 하나당 4 byte

그리하여 결국 float a 는 char b[4] 에 담길 수 있는 것이다.
패킷으로 전송을 할때 우리는 char배열만을 보낼수 있는 고로..
이것은 정말 갈라지는 땅에 단비와 같은 사실이 아닐 수 없었다.

다음의 코드는 어떻게 위의 작업을 할 수 있는지를 보여주는 코드이다.
실제로 복/붙 하여도 멋지게 돌아갈 것이다 테스트 해보라!!

#include <stdio.h>
#include "stdafx.h"
 
typedef union
{
  unsigned char a[4];
  float b;
} union_data;
 
int main()
{
  union_data data_s,data_r;
  data_s.b = 123.352; // send할 float값을 세팅한다.
  // 캐릭터 배열의 메모리만을 복사한다!!!!
  memcpy(&data_r.a, &data_s.a,sizeof(data_s.a)); 

  printf("%x %x %x %x\n", data_r.a[0], data_r.a[1], data_r.a[2], data_r.a[3]);
  // 넘겨받은 데이터의 FLOAT 값을 출력해본다. 
  printf("%f\n", data_r.b);
  return 0;
}


이정도면 어떤가.. 대단하지 않은가??
이글을 읽으시는 모두에게 도움이 되었기를 바랍니다 ㅋㅋㅋ 
Posted by jsilva
이전버튼 1 이전버튼

블로그 이미지
음악을 좋아하는 개발자입니다 ㅎㅎ 그냥 제 일상, 생각, 지식, 정보 등을 담은 위한 공간입니다 ^^
jsilva

공지사항

Yesterday
Today
Total

달력

 « |  » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

글 보관함

최근에 올라온 글

최근에 달린 댓글