我正在尝试将
512x512
uint16 2D
数组保存为二进制电影的二进制帧。格式需要是大端,但我不断写入小端数据(尝试在Matlab、java中读取它,它仍然是小端)。我尝试更改字节顺序,如下所示,但无济于事。我很抱歉这是一个愚蠢的问题。
sys.byteorder = 'big'
for frame in range (0,1)
fid.write(array)
fid.close()
sys.byteorder = 'little';
以下线程似乎相关,但如果我尝试使用 struct.pack 更改字节顺序,则会写入垃圾。
您可以使用
<
/>
dtype 说明符强制更改 numpy 数组的字节顺序:
>>> import numpy as np
>>> a = np.arange(5, dtype=np.uint16)
>>> a.dtype.str
'<u2'
>>> b = a.astype('>u2')
>>> a.tostring()
b'\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00'
>>> b.tostring()
b'\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04'
当以大端格式将二进制数据写入文件时,函数
tobytes
非常方便。它需要一个可选参数 order
,必须设置为 'F'
,表示 Fortran 连续:
a = np.array([1,256,257,1025], dtype=np.uint16)
b = a.tobytes('F')
with open('bigendian.bin', 'wb') as fid:
fid.write(b)
with open('bigendian.bin', 'rb') as fid:
c = fid.read(8)
assert c == b'\x01\x00\x00\x01\x01\x01\x01\x04'