python
  • linux
  • ubuntu
  • binary
  • hex
  • 2014-03-06 102 views 0 likes 
    0

    我想將二進制文件轉換爲特定格式的十六進制文件並將其保存爲文本文件。從二進制文件創建十六進制文本文件

    最終產品應該是這樣的:

    "\x7f\xe8\x89\x00\x00\x00\x60\x89\xe5\x31\xd2\x64\x8b\x52" 
    

    輸入是一個可執行文件「一」。 這是我當前的代碼:

    with open('a', 'rb') as f: 
        byte = f.read(1) 
        hexbyte = '\\x%02s' % byte 
        print hexbyte 
    

    與這幾個問題:

    1. 僅打印第一個字節。
    2. 結果是 「\ x」 和一箱這樣的:

    00 7f

    在終端它看起來完全是這樣的: enter image description here

    爲什麼會這樣呢?最後,如何將所有的十六進制文件保存到文本文件中以獲得上面顯示的最終產品?

    編輯:能夠將文件作爲文本保存

    txt = open('out.txt', 'w') 
    print >> txt, hexbyte 
    txt.close() 
    
    +2

    你混淆了一個十六進制數據的二進制表示。您的「最終產品」不是十六進制,而是二進制。請向我們顯示輸入數據。 – msvalkon

    +0

    而且你只讀過1個字節的數據,因爲你說'byte = f.read(1)',而且你沒有循環或其他方法來讀取更多的數據。我不知道'\\\\'應該做什麼。 – msvalkon

    +0

    如果你想將字節轉換爲十六進制:'「0x%02X」%ord(byte)'或'「0x {:02}」.format(ord(byte))' – msvalkon

    回答

    1

    你不能注入到數字這樣的轉義序列。轉義序列基本上是常量,所以它們不能有動態部分。

    有已經爲這個模塊,反正:

    from binascii import hexlify 
    with open('test', 'rb') as f: 
        print(hexlify(f.read()).decode('utf-8')) 
    

    只需使用一個字節字符串hexlify功能,它會給你一個十六進制字節的字符串。您需要decode將其轉換回普通字符串。

    不太確定decode是否適用於Python 2,但您真的應該使用Python 3。

    +0

    謝謝,這是有效的。但是,它不會在每2個字符前給出「/ x」。建議嗎? – bernlim

    0

    你的輸出看起來像在Python字節串的表示返回由repr()

    with open('input_file', 'rb') as file: 
        print repr(file.read()) 
    

    注意:一些字節被示爲ASCII字符例如'\x52' == 'R'。如果你想爲十六進制轉義要顯示的所有字節:

    with open('input_file', 'rb') as file: 
        print "\\x" + "\\x".join([c.encode('hex') for c in file.read()]) 
    
    0

    內容只需添加到listprint

    with open("default.png",'rb') as file_png: 
        a = file_png.read() 
    
    l = [] 
    l.append(a) 
    print l 
    
    相關問題