我想以特定格式将二进制转换为十六进制,并将其另存为文本文件。
最终产品应该是这样的:
"\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
有一些问题:
00
7f
在终端中,它看起来完全像这样:
为什么会这样?最后,如何将所有十六进制保存到文本文件中以获得上面显示的最终产品?
编辑:能够使用
将文件另存为文本txt = open('out.txt', 'w')
print >> txt, hexbyte
txt.close()
答案 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)
只需将内容添加到list
和print
:
with open("default.png",'rb') as file_png:
a = file_png.read()
l = []
l.append(a)
print l