Python Struct,通过对齐更改大小。

时间:2010-11-05 21:48:14

标签: 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

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

提前致谢

2 个答案:

答案 0 :(得分:4)

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

默认情况下,

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

实施例

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

答案 1 :(得分:2)

我认为H在您的7 B

之后强制执行2字节对齐

啊哈,对齐信息位于http://docs.python.org/library/struct.html的顶部,而不是the definition of the format characters