我正在用ARM9处理器编写C for Linux程序.该程序用于访问网络数据包,其中包括一系列标记数据,如:
...
fieldID和length字段都是uint16_t.数据可以是1个或更多字节(如果使用全长,则最多64k,但事实并非如此).
只要有一个偶数个字节,我就没有看到问题.但是,如果我有一个1或3或5字节的
部分,那么下一个16位fieldID最终不会出现在16位边界上,我预计会出现对齐问题.已经有一段时间了,因为我从头开始做了这样的事情,所以我对细节不太了解.任何反馈欢迎.谢谢.
为避免在这种情况下出现对齐问题,请将所有数据作为unsigned char *
.所以:
unsigned char *p; //... uint16_t id = p[0] | (p[1] << 8); p += 2;
上面的示例假定为"little endian"数据布局,其中最低有效字节首先出现在多字节数字中.