강좌 & 팁
글 수 2,412
2012.04.07 16:30:16 (*.52.177.29)
43724
아래와 같은 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 ]$