마음의 안정을 찾기 위하여 - 구조체/레코드 팩킹(Packing) - 서로 다른 이기종간 프로그램의 데이터 교환
2266626
963
804
관리자새글쓰기
태그위치로그방명록
별일없다의 생각
dawnsea's me2day/2010
색상(RGB)코드 추출기(Color...
Connection Generator/2010
최승호PD, '4대강 거짓말 검...
Green Monkey**/2010
Syng의 생각
syng's me2DAY/2010
천재 작곡가 윤일상이 기획,...
엘븐킹's Digital Factory/2010
구조체/레코드 팩킹(Packing) - 서로 다른 이기종간 프로그램의 데이터 교환
My Library | 2007/10/09 10:33


서로 다른 언어로 구성되어 있거나, 다른 프로그램에서 데이터를 공유하고자 할때는 여러가지 사항을 고려해야 한다.

그중 구조체를 주고받을 때 특히 문제가 많이 발생하는데, C/C++ 과 Delphi의 레코드 정렬방식에
대한 내용은 알아두는게 좋다.

C/C++ 부분
#pragma pack(push)
#pragma pack(1)
// #pragma pack(push,1)

typedef struct packedStructure {
....
} packedStructure;
#pragma pack(pop)

Delphi 부분
type
packedStructure = packed record
....
end;


C언어에서의 #pragma pack을 이용하여 struct member alignment을 설정하며 테스트 해 보자.

#pragma pack(n) //n=1, 2, 4, 8, 16
#pragma pack() //default 값으로 설정

#pragma pack(n)은 다른 #pragma pack(n) 또는 #pragma pack()을 만날 때까지 모든 struct, class의 struct member alignment에 적용이 된다.

//default 8
struct noPack {
char ;
int i;
};
printf("%s ", sizeof(noPack)); //4+4


pragma pack(2)
struct Pack {
char c;
int i;
};
#pragma pack() //default 값으로 복원
printf("%s ", sizeof(Pack)); //2+4

보통 소켓통신 프로그램에서 데이터를 주고 받을때에는 #pragma pack(1)로 설정을 하여, 구조체상의 빈공간(? : padding)을 모두 없앤 후, 실제 데이터만 보내고, 받는 쪽에서도 동일한 형태를로 받도록 작성을 한다.

만일 특정 헤더 파일의 전체 struct, class의 struct member alignment를 1로 설정하고 싶다면, 아래와 같이 사용한다.

#pragma pack(1)
#include "헤더파일"
#pragma pack()

※ 강제로 struct member alignment를 설정하게 되면 Default 값보다는 처리속도가 느려진다.

2007/10/09 10:33 2007/10/09 10:33
Article tag list Go to top
View Comment 0
Trackback URL :: 이 글에는 트랙백을 보낼 수 없습니다
 
 
 
 
: [1] ... [700][701][702][703][704][705][706][707][708] ... [1317] :
«   2024/03   »
          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            
전체 (1317)
출판 준비 (0)
My-Pro... (41)
사는 ... (933)
블로그... (22)
My Lib... (32)
게임 ... (23)
개발관... (3)
Smart ... (1)
Delphi (93)
C Builder (0)
Object... (0)
VC, MF... (10)
Window... (1)
Open API (3)
Visual... (0)
Java, JSP (2)
ASP.NET (0)
PHP (5)
Database (12)
리눅스 (29)
Windows (25)
Device... (1)
Embedded (1)
게임 ... (0)
Web Se... (2)
Web, S... (21)
잡다한... (6)
프로젝트 (0)
Personal (0)
대통령... (13)
Link (2)