8

我有一个正在读取的二进制文件,其中一些 2 字节值以“反向”字节顺序(小端?)存储,例如。

1D 00 13 00 27  00 3B 00 45  00 31 00 4F

创建这些值的原始程序在内部将它们存储为短裤。这些值应对应于:29、19、39、59、69、49、79。我正在尝试使用 python 2.6.5 读取这些值(尽管这可能会在更旧的系统上运行,例如 2.3 和 2.4) .

我试过使用

val1, val2, val3, val4, val5, val6, val7 = struct.unpack("1h 1h 1h 1h 1h 1h 1h", data)

而且,当然,这些值都是错误的:

7427
4864
9984
15104
17664
12544
20224

在查看了 struct 的文档后,我想我可以使用类似的东西

val1, ... = struct.unpack("!h !h ...

但是在测试时,我只得到了

struct.error: bad char in struct format

如何使用正确的字节顺序解压缩这些值?我是否坚持分别读取两个字节,然后在 python 代码中重新组装它们?

4

3 回答 3

9

字节顺序在格式字符串的开头用单个字符指定。

values = struct.unpack('!7h', data)
于 2011-11-02T16:23:33.167 回答
4

怎么样

>>> a='\x1d\x00\x13\x00\x27\x00\x3b\x00\x45\x00\x31\x00\x4f\x00'

>>> struct.unpack('<%dH' % (len(a) / 2), a)

(29, 19, 39, 59, 69, 49, 79)?

根据结构文档,您似乎需要使用<来指定小端。

于 2011-11-02T16:45:05.353 回答
1

我已经通过使用解决了类似的反转字节顺序问题a.byteswap(True),但我不确定这是否是最有效的方法。

于 2012-12-13T21:02:34.307 回答