【问题标题】:how to compare hex files in python如何在python中比较十六进制文件
【发布时间】:2014-02-27 11:15:07
【问题描述】:

我有大数据十六进制文件,我需要从中比较一些十六进制值。当我通过 python 读取它时,它会自动将其转换为 ascii,所以我必须再次对其进行解码。我怎样才能直接读取十六进制文件?

到目前为止,我已经尝试使用 Intelhex python 包,但它抛出了一个错误: intelhex.HexRecordError: Hex 文件包含无效记录。那么只有我的文件有什么问题吗?

如果我在不解码的情况下成功读取十六进制数据会产生多大的性能差异

【问题讨论】:

  • “十六进制文件”是什么意思?包含0-9a-f 字符序列的文件?还是您使用十六进制编辑器创建/修改的二进制文件?
  • 查看 alex 的回答 here
  • Stefano---正好是一个包含0-9a-f序列的文件
  • win---看来你使用了编码方法。即使我也这样做了,但我需要另一种方法来提高性能。
  • 那么如果你有一个包含字符“4”、“8”、“6”、“9”的文件,那么Python在你阅读的时候会自动将它翻译成“Hi”?很奇怪。你能发布一些演示这种行为的代码吗?

标签: python performance algorithm file hex


【解决方案1】:

将文件拆分为由纯[0-9a-fA-F] 字符组成的十六进制单词,然后int(word, 16) 会将单词更改为普通的python整数。可以直接比较整数。

或者,您可以保留十六进制单词,然后使用 '{0:x}'.format(someinteger) 将整数转换为十六进制字符串,然后再比较十六进制字符串。

【讨论】:

    【解决方案2】:
    >>> s = open('input_file', 'rb').read(10)
    >>> s
    '\x00\x00\x00\x02\x00\xe6\x00\xa1I\x8d'
    

    这是一个普通的字节序列。如果一个字节在 ascii 范围内,则它在表示中显示为相应的字符,例如s[-2] == 'I'。字节是相同的(73 十进制形式),它只是以人类可读的形式显示。

    您无需进行任何转换即可比较字节串(a[2:10] == b[4:12] 有效)。除非您提出要求,否则 Python 不会将您的文件解码为 hex、ascii 或其他任何内容。只需确保以二进制模式 (rb) 打开文件即可。

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 1970-01-01
      • 2012-08-16
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多