我正在用 C 为 ARM9 处理器上的 Linux 编写一个程序。该程序用于访问网络数据包,其中包括一系列标记数据,例如:
<fieldID><length><data><fieldID><length><data> ...
fieldID 和 length 字段都是 uint16_t。数据可以是 1 个或更多字节(如果使用全长,则最多为 64k,但事实并非如此)。
只要<data>
有偶数个字节,我没有看到问题。但如果我有 1 或 3 或 5 字节<data>
部分,那么下一个 16 位 fieldID 最终不在 16 位边界上,我预计会出现对齐问题。我已经有一段时间没有从头开始做这样的事情了,所以我有点不确定细节。欢迎任何反馈。谢谢。
为了避免这种情况下的对齐问题,请将所有数据作为unsigned char *
. So:
unsigned char *p;
//...
uint16_t id = p[0] | (p[1] << 8);
p += 2;
上面的示例假设“小端”数据布局,其中最低有效字节在多字节数中排在前面。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)