Создать текстовый файл шестнадцатеричный из двоичного
Я хотел бы преобразовать двоичный файл в шестнадцатеричный в определенном формате и сохранить его в виде текстового файла.
Конечный продукт должен быть примерно таким:
"\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
Несколько проблем с этим:
- Это печатает только первый байт.
- Результатом является "\x" и поле вроде этого:
00
7f
В терминале это выглядит именно так:
Почему это так? И, наконец, как мне сохранить все шестнадцатеричные числа в текстовом файле, чтобы получить конечный продукт, показанный выше?
РЕДАКТИРОВАТЬ: возможность сохранить файл как текст с
txt = open('out.txt', 'w')
print >> txt, hexbyte
txt.close()
3 ответа
Вы не можете вводить числа в escape-последовательности, подобные этому. Escape-последовательности по сути являются константами, поэтому они не могут иметь динамических частей.
В любом случае, для этого уже есть модуль:
from binascii import hexlify
with open('test', 'rb') as f:
print(hexlify(f.read()).decode('utf-8'))
Просто используйте функцию hexlify для байтовой строки, и она даст вам шестнадцатеричную байтовую строку. Вам нужно decode
превратить его обратно в обычную строку.
Не совсем уверен, если decode
работает в Python 2, но вы все равно должны использовать Python 3.
Просто добавьте контент в list
а также print
:
with open("default.png",'rb') as file_png:
a = file_png.read()
l = []
l.append(a)
print l
Ваш вывод выглядит как представление строки байтов в 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()])