这是我试图解压缩的十六进制代码。 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,我的解包函数中的格式和十六进制值的长度。我不明白。
提前致谢
答案 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
啊哈,对齐信息位于http://docs.python.org/library/struct.html的顶部,而不是the definition of the format characters。