아래와 같은 struct 구문이 있습니다.

struct {
    char    ch_code;
    int     n_ndx;
    short   w_data;
    char    ch_etc;
}

얘기인 즉 상대 방이 시리얼 통신으로 이렇게 보내 준다고 하네요. 시리얼로 데이터를 수신하기 위해 바이트 버퍼로 받았습니다. 그렇다면 struct 구문의 요소의 각 크기별로 따로따로 구해야 할까요? 어떤 방법이 편할까요? C언어에서는 포인터를 사용하면 매우 간단하게 처리할 수 있습니다. 아래처럼 말이죠. ^^

#include <stdio.h>
        
#define STRUCT_PACK     __attribute__ ((packed))         

typedef struct {
    char    ch_code;
    int     n_ndx;
    short   w_data;
    char    ch_etc;
} STRUCT_PACK data_t;


int main( void){                            
    
    char    buff[] = { 0x01, 0x05, 0x04, 0x03, 0x02, 0x07, 0x06, 0x08};
    data_t *p_data;
    
    p_data  = ( data_t *)buff;
    
    printf( "p_data->ch_code= 0x%02x\n", p_data->ch_code);
    printf( "p_data->n_ndx  = 0x%08x\n"  , p_data->n_ndx  );
    printf( "p_data->w_data = 0x%04x\n" , p_data->w_data );
    printf( "p_data->ch_etc = 0x%02x\n" , p_data->ch_etc );
    
    return 0;
}

컴파일하고 실행하면 요소 별로 출력되는 것을 볼 수 있습니다.

]$ gcc test.c -o test
]$ ./test
p_data->ch_code= 0x01
p_data->n_ndx  = 0x02030405
p_data->w_data = 0x0607
p_data->ch_etc = 0x08
]$