Python - Печать Hex из файла - PullRequest
1 голос
/ 21 июля 2011

У меня есть следующий код:

code1 = ("\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1")
print code1

code2 = open("code.txt", 'rb').read()
print code2

выход code1:

�צ�t$פ_)�½i�»±

выход code2:

"\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1"

Мне нужен code2 (который я прочитал изфайл), чтобы иметь тот же вывод, что и code1.
Как я могу решить эту проблему?

Ответы [ 3 ]

5 голосов
/ 21 июля 2011

Для интерпретации последовательности символов, таких как

In [125]: list(code2[:8])
Out[125]: ['\\', 'x', 'd', '9', '\\', 'x', 'f', '6']

, поскольку Python будет строкой с экранированными символами, например

In [132]: list('\xd9\xf6')
Out[132]: ['\xd9', '\xf6']

, используйте .decode('string_escape'):

In [122]: code2.decode('string_escape')
Out[122]: '\xd9\xf6\xd9t$\xf4_)\xc9\xbdi\xd1\xbb\x18\xb1'

В Python3 кодек string_escape удален, поэтому его эквивалент становится

import codecs
codecs.escape_decode(code2)[0]
3 голосов
/ 21 июля 2011

Этот пример:

import binascii

code1 = "\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1"
code2 = "\\xd9\\xf6\\xd9\\x74\\x24\\xf4\\x5f\\x29\\xc9\\xbd\\x69\\xd1\\xbb\\x18\\xb1"

print code1 == binascii.unhexlify(code2.replace('\\x', ''))

отпечатки True.

Вы можете использовать binascii.unhexlify для преобразования шестнадцатеричного текстового представления в двоичное, но сначала необходимо удалить \x из строки.

РЕДАКТИРОВАТЬ : Я только что понял, что двойные кавычки являются частью вашего вывода. По сути, вам нужно передать только правильную шестнадцатеричную строку, поэтому все остальное нужно удалить. В вашем случае вам нужно передать code2.replace('\\x', '').strip('"') на unhexlify. Вы можете использовать eval и, вероятно, будете, но рассмотрите это Безопасность eval () Python для ненадежных строк? для будущих выборов.

0 голосов
/ 21 июля 2011

print eval(code2) должен сделать работу.

...