python - 在python中将整数转换为大端二进制文件

标签 python multidimensional-array struct endianness

我正在尝试使用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/

相关文章:

python - Pygame:字体模块不可用

python - SPSS python 抛出不连续的错误

javascript - 如何从数组列表创建多维数组/数组树?

java - main() 打印多维数组的值与 Paint() 不同

C++:使用迭代器调用 Vector::erase

c - 理解 C 中的结构体和指针变量

python - 如何使用 PostgreSQL 从查询中获取列属性?

python - 将 'decimal-mark' 千位分隔符添加到数字

c - 在函数之间传递多维数组

dictionary - 匿名结构,结构{}{}和{}的区别