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