繁体   English   中英

使用Python的人类可读二进制数据

[英]Human-readable binary data using Python

我的工作需要执行数学仿真,其参数来自二进制文件。 模拟器可以毫无问题地读取此类二进制文件。

但是,我需要窥视二进制文件以确保参数正是我需要的参数,而且我似乎无法做到这一点。

我想用Python编写一个脚本,该脚本允许我读取二进制文件,搜索我关心的参数并显示其值。

我对二进制文件了解的内容:

它代表简单的文本(而不是图像或soud文件)。 有一段代码可以将文件“转储”为可读格式:如果我在Emacs中打开该转储,则会发现类似以下内容:

CENTRAL_BODY = 'SUN'

所有文件只是一系列类似的说明。 我可以使用该转储代码,但我宁愿让Python那样做。

这似乎是一个非常琐碎的问题,对于您不了解该问题深表歉意。 我以为我是一个熟练的程序员!

非常感谢。

您可以将文件的内容读入内存中的字符串中:

thedata = open(thefilename, 'rb').read()

然后在其中找到一个字符串:

where = thedata.find('CENTRAL_BODY')

最后切下您关心的部分:

thepart = thedata[where:where+50]  # or whatever length

和你喜欢显示它(如找到内定位字符串值thepart=标志,那么第一个下面引用,那么接下来的后引号)。

听起来这个“转储”程序已经完成了您需要的工作:解释二进制文件。 我想我的方法是编写一个可以获取转储文件,提取所需参数并显示它们的python程序。

然后用类似下面的内容解析它:

myparms.py:

import sys

d = {}
for line in sys.stdin:
    parts = line.split("=",2)
    if len(parts) < 2:
        continue
    k = parts[0].strip()
    v = parts[1].strip()
    d[k] = v

print d['CENTRAL_BODY']

像这样使用:

转储parameters.bin | python myparms.py

您没有提到平台,也没有提供有关转储格式的详细信息,但这应该是一个起点。

如果它是二进制文件,则需要使用struct模块。 您将需要知道文件中数据的格式。 如果没有记录,则必须对其进行反向工程。

您是否有其他转储程序的源代码? 您也许可以将其移植到Python

如果我们可以看到二进制文件和相应的转储是什么样子,我们可能会更好地帮助您

您必须知道数据存储的格式; 根本没有办法解决。

如果没有书面说明,请尝试使用十六进制编辑器将其打开,并使用文本转储作为参考来研究格式。 如果您可以获取用于创建文本转储的工具的源代码,那将对您有很大帮助。

请记住,数据可能会以某种方式进行加密,例如rot13。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM