我有大数据十六进制文件,我需要从中比较一些十六进制值。当我通过python阅读时,它会自动将它转换为ascii,所以我必须再次解码。我怎样才能直接读取hex文件?如何比较python中的十六进制文件
直到现在,我已经尝试使用Intelhex python软件包,但它是抛出一个错误: intelhex.HexRecordError:十六进制文件包含无效record.So是否有任何问题与我的文件只?
,有多少性能上的差异将会使,如果我成功读取十六进制数据无需解码
我有大数据十六进制文件,我需要从中比较一些十六进制值。当我通过python阅读时,它会自动将它转换为ascii,所以我必须再次解码。我怎样才能直接读取hex文件?如何比较python中的十六进制文件
直到现在,我已经尝试使用Intelhex python软件包,但它是抛出一个错误: intelhex.HexRecordError:十六进制文件包含无效record.So是否有任何问题与我的文件只?
,有多少性能上的差异将会使,如果我成功读取十六进制数据无需解码
划分的文件到由纯粹的[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
),它只是以可读的形式显示。
你不需要做任何转换来比较字节串(a[2:10] == b[4:12]
作品)。除非你问,否则Python不会将你的文件解码为十六进制,ascii或其他任何东西。只要确保以二进制模式打开文件(rb
)。
“hex file”是什么意思?一个包含'0-9a-f'字符序列的文件?或者用十六进制编辑器创建/修改的二进制文件? –
请参阅亚历克斯的答案[这里](http://stackoverflow.com/a/2894216/674039) – wim
斯特凡诺---正好包含一个文件序列0-9a-f –