开发者

Python - Printing Hex from a file

I have the following code:

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 output:

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

code2 output:

"\xd9\xf6\xd9\x74\x24\xf4\x5f\x29\xc9\xbd\x69\xd1\xbb\x18\xb1"开发者_StackOverflow社区

I need code2 (which I read from a file) to have the same output as code1.

How can i solve this ?


To interpret a sequence of characters such as

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

as Python would a string with escaped characters, such as

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

use .decode('string_escape'):

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

In Python3, the string_escape codec has been removed, so the equivalent becomes

import codecs
codecs.escape_decode(code2)[0]


This example:

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', ''))

prints True.

You can use binascii.unhexlify to convert hexadecimal text representation to binary, but first have to remove \x from the string.

EDIT: I've just realised that double quotes are part of your output. Essentially you need to pass just valid hex string, so everything else need to be stripped off. In your case you need to pass code2.replace('\\x', '').strip('"') to unhexlify. You can use eval and probably will, but consider this Security of Python's eval() on untrusted strings? for future choices.


print eval(code2) should do the job.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜