如何切换二进制数据的字节顺序

pfy*_*yon 8 python struct pack

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

1D 00 13 00 27  00 3B 00 45  00 31 00 4F
Run Code Online (Sandbox Code Playgroud)

创建这些值的原始程序将它们内部存储为short.这些值应该对应于: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)
Run Code Online (Sandbox Code Playgroud)

当然,价值观都是错误的:

7427
4864
9984
15104
17664
12544
20224
Run Code Online (Sandbox Code Playgroud)

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

val1, ... = struct.unpack("!h !h ...
Run Code Online (Sandbox Code Playgroud)

但是在测试时,我才得到

struct.error: bad char in struct format
Run Code Online (Sandbox Code Playgroud)

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

Cat*_*lus 9

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

values = struct.unpack('!7h', data)
Run Code Online (Sandbox Code Playgroud)