将Python array('B') 转换为 array('H') - 是否始终为小端?
我有一个Python的 array('B')
(里面存了一些从文件读取的数据),我想把它转换成 array('H')
。我现在用的代码大概是这样的:
a = array.array('B', f.read())
b = a[16:32]
c = array.array('H', b.tostring())
不过在第三行的转换中,使用了本机的字节顺序,所以在不同的机器上会得到不同的结果。
有没有办法让这个转换始终使用小端字节顺序,不管本机的字节顺序是什么?
1 个回答
8
array.array
主要是用来做内部计算的,因为它总是使用本地的字节顺序。它有一个方法叫 byteswap
,可以用来改变字节的顺序。所以你需要检查一下 sys.byteorder
来确定你系统的字节顺序,然后再进行相应的调整。
如果想更好地控制字节的顺序,可以使用 struct
:
data = f.read()
c = struct.unpack_from('<8H', data, 16)