본문 바로가기
MISC.

별걸 다 쓴다 : bit-field structure

by irmus 2009. 3. 18.
통신 패킷을 다이어트 해야한다.

1. packed structure의 사용
padding으로 낭비되는 공간을 줄일수 있다. 네트워킹에서는 기본/필수

2. bit-packing
예를들어 24비트로 표현되는 데이터를 4바이트 변수에 담아 전송하고 있었다면 이를 3바이트로 다이어트.
이 과정을 bit 연산을 통해 "수동"으로 해 줘도 되지만, structure의 bit-field를 쓰면 편하다. 이렇게...
typedef struct __attribute__((packed))
{
    unsigned long timestamp:24;
    unsigned short acc_x;
    unsigned short acc_y;
    unsigned short acc_z;
    unsigned char checksum;
} MyStruct;

그런데 이 bit-field가 gcc 4.2에서는 "척결해야할 대상"으로 되었나보다.
그냥 쓰면 warning이 발생
main.c:37: warning: type of bit-field 'timestamp' is a GCC extension

컴파일러님 한번만 봐주세요. 딱 요기서만 쓸께요. 굽신굽신...
근데 뒤져보니 막강파워 매직워드 "닥쳐"가 있네.
typedef struct __attribute__((packed))
{
    __extension__ unsigned long timestamp:24;
    unsigned short acc_x;
    unsigned short acc_y;
    unsigned short acc_z;
    unsigned char checksum;
} MyStruct;

컴파일러님께서는 깨갱하십니다.