我有一个二进制文件,我正在读取其中一些2字节的值以“反向”字节顺序存储(小尾数?),例如
1D 00 13 00 27 00 3B 00 45 00 31 00 4F
创建这些值的原始程序在内部将它们存储为短裤。这些值应对应于:29、19、39、59、69、49、79。我正在尝试使用Python2.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代码中重新组装它们?
怎么样
>>> 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)
?根据struct文档,似乎需要使用
<
来指定小尾数。我已经用
a.byteswap(True)
解决了一个类似的反字节顺序问题,但我不确定这是否是最有效的方法。字节顺序在格式字符串的开头用单个字符指定。
相关问题 更多 >
编程相关推荐