struct.unpack 6个字节变为short而int失败。为什么?

时间:2014-06-04 19:14:18

标签: python

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 个答案:

答案 0 :(得分:3)

这是因为C structure alignment。如果您确实希望数据项保持未对齐状态,请在格式化字符串

之前添加=符号
>>> s = '\x01\x00\x02\x00\x00\x00'
>>> struct.unpack('=hi',s)
(1, 2)

请参阅文档7.3.2.1. Byte Order, Size, and Alignment