struct.unpack 6字节转换为short和int失败。为什么?
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',它就能接受。
我到底漏掉了什么呢?
1 个回答
3
这是因为 C
结构的对齐方式。如果你希望你的数据项保持不对齐,可以在格式化字符串前加一个 =
符号。
>>> s = '\x01\x00\x02\x00\x00\x00'
>>> struct.unpack('=hi',s)
(1, 2)
可以参考文档 7.3.2.1. 字节顺序、大小和对齐