python - 将二进制文件解释为 ASCII

标签 python linux shell

我有一个二进制文件(我用 C 语言创建的),我想查看该文件的内部结构。显然,我将无法“看到”任何有用的东西,因为它是二进制的。但是我知道它包含一定数量的 double 字行。我正在寻找一个脚本来读取一些值并打印它们,以便我可以验证它们是否在正确的范围内。换句话说,这就像在 linux 中对文本文件执行 headtail 操作。 有办法吗? 现在我在 Python 中得到了一些东西,但它没有做我想要的:

CHUNKSIZE = 8192
file = open('eigenvalues.bin', 'rb')
data = list(file.read())
print data

最佳答案

使用 array module读取同质二进制表示数字:

from array import array

data = array('d')
CHUNKSIZE = 8192
rowcount = CHUNKSIZE / data.itemsize  # number of doubles we find in CHUNKSIZE bytes

with open('eigenvalues.bin', 'rb') as eg:
    data.fromfile(eg, rowcount)

array.array 类型在其他方面的行为就像一个列表,只有它可以容纳的值的类型受到限制(在本例中为 float)。

根据输入数据,您可能需要在读取后添加一个 data.byteswap() 调用以在小端和大端之间切换。使用 sys.byteorder查看用于读取数据的字节顺序。如果您的数据是在使用小字节序的平台上写入的,如果您的平台使用其他形式,则交换,反之亦然:

import sys

if sys.byteorder == 'big':
    # data was written in little-endian form, so swap the bytes to match
    data.byteswap()

关于python - 将二进制文件解释为 ASCII,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16480664/

相关文章:

python - 如何获取已加载页面的 HTML 标题? (PyQt4)

linux - PostgreSQL : download schema at the same time while showing using\d+ <table_name> command?

linux - 服务器上没有事件,每 5 秒记录一次

linux - shell脚本创建变量并在文件中查找变量

linux - 语法错误 : end of file unexpected (expecting "done")

linux - 仅删除文件名中至少有一位数字的文件而不是目录

Python 库,用于制作带有选项等的漂亮命令行脚本

python - 在没有列表突变的情况下通过 argmin() 或 min() 在 python/numpy 中查找前三个值的索引?

python - SQLAlchemy:定义一个成员名称与列名称不同的模型

linux - 通过 Xbee S1 模块发送的数据之间的回车 (0X0D)