s = '\x01\x00\x02\x00\x00\x00'
struct.unpack('hi',s)
我希望得到(1,2),但得到错误:
error: unpack requires a string argument of length 8
如果我单独执行两个解包,它可以工作:
myshort = struct.unpack('h',s[:2])
myint = struct.unpack('i',s[2:])
另外,有趣的是,如果格式字符串是'ih'而不是'hi',它会接受它。
我错过了什么?
答案 0 :(得分:3)
这是因为C
structure alignment。如果您确实希望数据项保持未对齐状态,请在格式化字符串
=
符号
>>> s = '\x01\x00\x02\x00\x00\x00'
>>> struct.unpack('=hi',s)
(1, 2)