我有大數據十六進制文件,我需要從中比較一些十六進制值。當我通過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 –