1字节对齐的坑能有多大
这个问题定位出来可把我🐂🍺坏了
这是我声明的结构体,区别就在于这个结构体是否一字节对齐
struct clubReply { u8 cmd; u8 md5[16]; u32 size; u8 data[0]; }__attribute__((packed));
当我设置一字节对齐的时候,正确的数据如下
now 02 64f3b1e85436228da95d272e8d1b4660 20000000 03000000 03030304 02020203 01010101 03000000 1e010203 14010101 0a010101
当我没有设置一字节对齐的时候,错误数据如下
wrong 02 64f3b1e85436228da95d272e8d1b4660 000000 20000000 03000000 03030304 02020203 01010101 03000000 1e010203 14010101 0a
该指针在size之前补齐了3字节
........
这个问题奇葩就奇葩在,传输的数据出现问题可能在好几个环节,加解密没有问题,都是错误数据,写入到struct clubReply的data也是没有问题的,我是完全没有想到struct clubReply的其他数据出现了问题,因为那些个赋值很简单
但因为struct clubReply除了用来读数据,还用来填写数据,填充报文时,结构体必须一字节对齐,得亏之前开发协议的经验,留心的地方我埋得很深的地方有数。
posted on 2021-05-11 16:15 toughcactus 阅读(230) 评论(0) 收藏 举报
浙公网安备 33010602011771号