我正在尝试使用Python通过以下方式将由整数组成的二维数组转换为大端二进制文件:
import struct;
fh=open('file.bin','wb')
for i in range(width):
for j in range(height):
fh.write(struct.pack('>i2',data[i,j]))
fh.close()
当我用 numpy 打开它时:
a=np.fromfile('file.bin',dtype='>i2')
结果是一个原始数据之间有零的数组:
[266, 0, 267, 0, 268,
0, 272, 0, 268, 0, 264, 0, 266, 0, 264, 0, 263, 0,
263, 0, 267, 0, 263, 0, 265, 0, 266, 0, 266, 0, 267,
0, 267, 0, 266, 0, 265, 0, 270, 0, 270, 0, 270, 0,
272, 0, 273, 0, 275, 0, 274, 0, 275]
这就是我想要获得的:
[266, 267, 268, 272, 268, 264, 266, 264, 263,
263, 267, 263, 265, 266, 266, 267,
267, 266, 265, 270, 270, 270, 272, 273, 275, 274, 275]
你知道我的代码有什么问题吗?
最佳答案
首先,整数是 4 字节长。当您使用 struct.pack 模块打包整数时,您将其强制分成 2 个字节 block ,从而将整数拆分为两个短整型;一个有效 block 包含实际值,另一个有效 block 包含零。
因此,当您通过 numpy 读取它时,它会加载带有尾随零的值。
至于如何解决这个问题,只需在从 numpy 打包和加载时将格式字符串从 '>i2' 替换为 '>i' 即可。它应该会给你预期的结果。
关于python - 在python中将整数转换为大端二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29118838/