如何在python中比较十六进制文件
我有大数据的十六进制文件,我需要从中比较一些十六进制值。当我通过python读取时,它会自动将其转换为ascii,因此我必须再次解码。我如何直接读取十六进制文件 到目前为止,我已经尝试使用Intelhex python包,但它抛出了一个错误: intelhex.HexRecordError:十六进制文件包含无效记录。因此,仅我的文件是否存在任何问题如何在python中比较十六进制文件,python,performance,algorithm,file,hex,Python,Performance,Algorithm,File,Hex,我有大数据的十六进制文件,我需要从中比较一些十六进制值。当我通过python读取时,它会自动将其转换为ascii,因此我必须再次解码。我如何直接读取十六进制文件 到目前为止,我已经尝试使用Intelhex python包,但它抛出了一个错误: intelhex.HexRecordError:十六进制文件包含无效记录。因此,仅我的文件是否存在任何问题 如果我在不解码的情况下成功读取十六进制数据,那么性能会有多大的差异?将文件拆分为纯由[0-9a-fA-F]字符组成的十六进制字,那么int(word
如果我在不解码的情况下成功读取十六进制数据,那么性能会有多大的差异?将文件拆分为纯由
[0-9a-fA-F]
字符组成的十六进制字,那么int(word,16)
会将一个字更改为正常的python整数。您可以直接比较整数
或者,您可以保留十六进制字,然后在比较十六进制字符串之前,使用'{0:x}.format(someinteger)
将整数转换为十六进制字符串
>>> s = open('input_file', 'rb').read(10)
>>> s
'\x00\x00\x00\x02\x00\xe6\x00\xa1I\x8d'
它是一个普通的字节序列。如果一个字节在ascii范围内,那么它将在表示中显示为相应的字符,例如,s[-2]=“I”
。字节是相同的(73
十进制形式),它只是以人类可读的形式显示
您不需要进行任何转换来比较bytestrings(
a[2:10]==b[4:12]
works)。除非您要求,否则Python不会将您的文件解码为十六进制、ascii或任何其他格式。只需确保以二进制模式(rb
)打开文件。您所说的“十六进制文件”是什么意思?包含0-9a-f
字符序列的文件?或者是你用十六进制编辑器创建/修改的二进制文件?参见alex的答案Stefano——一个包含0-9a-fwin序列的文件——似乎你使用了编码方法。即使我也使用了同样的方法,但我需要一种替代方法来提高性能。因此,如果你有一个包含字符“4”、“8”、“6”、“9”的文件,然后Python会在您阅读时自动将其转换为“Hi”?很奇怪。您可以发布一些代码来演示这种行为吗?