2014-02-27 38 views
0

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

直到现在,我已经尝试使用Intelhex python软件包,但它是抛出一个错误: intelhex.HexRecordError:十六进制文件包含无效record.So是否有任何问题与我的文件只?

,有多少性能上的差异将会使,如果我成功读取十六进制数据无需解码

+2

“hex file”是什么意思?一个包含'0-9a-f'字符序列的文件?或者用十六进制编辑器创建/修改的二进制文件? –

+0

请参阅亚历克斯的答案[这里](http://stackoverflow.com/a/2894216/674039) – wim

+0

斯特凡诺---正好包含一个文件序列0-9a-f –

回答

0

划分的文件到由纯粹的[0-9a-fA-F]字符,那么int(word, 16)将一个字更改为普通的Python整数十六进制的话。你可以直接比较整数。

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

0
>>> 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)。