我正在进行一些网络编程,并使用一些struct
来描述我的帧头:
struct my_frame_header {
uint16_t field1;
uint16_t field2;
};
所以,当我有一个缓冲帧时,我可以这样做:
uint8_t buffer[BUFFER_SIZE];
struct my_frame_header *frame_header = (struct my_frame_header *)buffer;
my_read(buffer, BUFFER_SIZE);
我现在可以像这样访问标题字段:
ntohl(frame_header->field1);
现在,我的问题是:在结构之后访问数据的最优雅方式是什么? (即在数据部分的开头获取指针)
答案 0 :(得分:1)
好吧,如果我正确地理解你的问题,你可以做类似
的事情uint8_t * data = (uint8_t *)buffer + sizeof (struct my_frame)
然后,data
将指向标题后面的下一个uint8_t
元素。
答案 1 :(得分:1)
uint8_t buffer[BUFFER_SIZE];
struct my_frame_header *frame_header = (struct my_frame_header *)buffer;
这是错误的,buffer
的基地址可以不对齐my_frame_header
。
另一方面:
malloc为您提供的块保证对齐以便它 可以保存任何类型的数据。
然后,您可以使用malloc
来跳过此问题:
uint8_t *buffer = malloc(BUFFER_SIZE);