Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中比较十六进制文件_Python_Performance_Algorithm_File_Hex - Fatal编程技术网

如何在python中比较十六进制文件

如何在python中比较十六进制文件,python,performance,algorithm,file,hex,Python,Performance,Algorithm,File,Hex,我有大数据的十六进制文件,我需要从中比较一些十六进制值。当我通过python读取时,它会自动将其转换为ascii,因此我必须再次解码。我如何直接读取十六进制文件 到目前为止,我已经尝试使用Intelhex python包,但它抛出了一个错误: intelhex.HexRecordError:十六进制文件包含无效记录。因此,仅我的文件是否存在任何问题 如果我在不解码的情况下成功读取十六进制数据,那么性能会有多大的差异?将文件拆分为纯由[0-9a-fA-F]字符组成的十六进制字,那么int(word

我有大数据的十六进制文件,我需要从中比较一些十六进制值。当我通过python读取时,它会自动将其转换为ascii,因此我必须再次解码。我如何直接读取十六进制文件

到目前为止,我已经尝试使用Intelhex python包,但它抛出了一个错误: intelhex.HexRecordError:十六进制文件包含无效记录。因此,仅我的文件是否存在任何问题


如果我在不解码的情况下成功读取十六进制数据,那么性能会有多大的差异?将文件拆分为纯由
[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”?很奇怪。您可以发布一些代码来演示这种行为吗?