Создать текстовый файл шестнадцатеричный из двоичного

Я хотел бы преобразовать двоичный файл в шестнадцатеричный в определенном формате и сохранить его в виде текстового файла.

Конечный продукт должен быть примерно таким:

"\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

В терминале это выглядит именно так:введите описание изображения здесь

Почему это так? И, наконец, как мне сохранить все шестнадцатеричные числа в текстовом файле, чтобы получить конечный продукт, показанный выше?

РЕДАКТИРОВАТЬ: возможность сохранить файл как текст с

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()])
Другие вопросы по тегам