Python从fi打印十六进制

2024-06-28 19:22:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

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

代码1输出:

^{pr2}$

代码2输出:

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

我需要code2(我从一个文件中读取的)要有与code1相同的输出。
我怎么解决这个问题?在


Tags: 代码xbdxd1code2code1xbbxf6x69
3条回答

解释一系列字符,如

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

与Python一样,字符串包含转义字符,例如

^{pr2}$

使用.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]

print eval(code2)应该完成这项工作。在

这个例子:

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

{cd1>打印^。在

可以使用binascii.unhexlify将十六进制文本表示形式转换为二进制,但首先必须从字符串中删除\x。在

编辑:我刚刚意识到双引号是输出的一部分。本质上你只需要传递有效的十六进制字符串,所以其他所有的东西都需要去掉。在您的例子中,您需要将code2.replace('\\x', '').strip('"')传递给unhexlify。您可以使用eval,而且可能会使用,但是考虑一下{a1}作为将来的选择。在

相关问题 更多 >