struct.unpack 6字节转换为short和int失败。为什么?

1 投票
1 回答
960 浏览
提问于 2025-04-18 08:37
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. 字节顺序、大小和对齐

撰写回答