【发布时间】:2015-01-28 09:42:22
【问题描述】:
我正在做一些网络编程,我用一些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);
现在,我的问题是:在结构之后访问数据最优雅的方式是什么? (即在数据部分的开头获取指针)
【问题讨论】:
-
这违反了严格的别名规则,不是吗?
-
谢谢,我不知道this rule。但似乎,通过使用
uint8_t buffer[]就可以了。 -
我会说是对的,但根本不是。我想如果你在一台 CHAR_BIT > 8 的机器上你会遇到麻烦。但我无法确认,因为我从未在这样的机器上工作过。
-
@Zaibis 不是真的,我在微控制器上运行它,所以应该没问题。感谢您的信息
-
我担心的是,标准规定只有
char、unsigned char和signed char或同等大小的类型指针允许以这种方式别名。因此,如果您使用的是 16 位机器,则可以通过使用uint8_t对其进行别名来打破该规则
标签: c struct network-programming