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