Skip to main content
 首页 » 编程设计

Python 结构,大小因对齐而改变。

2025年05月04日16xiaohuochai

这是我要解压的十六进制代码。 b'ABCDFGHa\x00a\x00a\x00a\x00a\x00\x00\x00\x00\x00\x00\x01'(它不应该有任何意义)

labels = unpack('BBBBBBBHHHHH5sB', msg) 
struct.error: unpack requires a bytes argument of length 24 

根据我的统计,这两个都是长度 = 23,包括我的解包函数中的格式和十六进制值的长度。我不明白。

提前致谢

请您参考如下方法:

当数据在自然边界上时,大多数处理器访问数据的速度更快,这意味着大小为 2 的数据应该在偶数地址上,大小为 4 的数据应该在可被 4 整除的地址上访问,等等。

struct 默认保持这种对齐方式。由于您的结构以 7 'B' 开头,因此添加了一个填充字节以在偶数地址上对齐下一个 'H'。为防止在 Python 中出现这种情况,请在字符串前面加上“=”。

示例:

>>> import struct 
>>> struct.calcsize('BBB') 
3 
>>> struct.calcsize('BBBH') 
6 
>>> struct.calcsize('=BBBH') 
5