从二进制创建十六进制文本文件

时间:2014-03-06 09:06:16

标签: python linux ubuntu binary hex

我想以特定格式将二进制转换为十六进制,并将其另存为文本文件。

最终产品应该是这样的:

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

输入来自可执行文件“a”。 这是我目前的代码:

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

有一些问题:

  1. 这只打印第一个字节。
  2. 结果是“\ x”和一个这样的框:
  3. 00 7f

    在终端中,它看起来完全像这样: enter image description here

    为什么会这样?最后,如何将所有十六进制保存到文本文件中以获得上面显示的最终产品?

    编辑:能够使用

    将文件另存为文本
    txt = open('out.txt', 'w')
    print >> txt, hexbyte
    txt.close()
    

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分:0)

您的输出看起来像是由repr()返回的Python中的字节字符串的表示形式:

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()])

答案 2 :(得分:0)

只需将内容添加到listprint

with open("default.png",'rb') as file_png:
    a = file_png.read()

l = []
l.append(a)
print l