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

End*_*der 2 python struct

这是我试图解压的十六进制代码。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
Run Code Online (Sandbox Code Playgroud)

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

提前致谢

Mar*_*nen 5

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

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

例子:

>>> import struct
>>> struct.calcsize('BBB')
3
>>> struct.calcsize('BBBH')
6
>>> struct.calcsize('=BBBH')
5
Run Code Online (Sandbox Code Playgroud)