将字符串打印为十六进制文字python

将字符串打印为十六进制文字python,python,string,escaping,Python,String,Escaping,我有很多预先存在的代码将字节数组视为字符串,即 In [70]: x = '\x01\x41\x42\x43' 哪种python始终打印为: In [71]: x Out[71]: '\x01ABC' 这使得调试变得很痛苦,因为我打印的字符串看起来不像我代码中的文本。如何将字符串打印为十六进制文字?您可以尝试以下方法: >>> x = '\x01\x41\x42\x43' >>> x.encode('hex') '01414243' 或 或 对于跨版本兼

我有很多预先存在的代码将字节数组视为字符串,即

In [70]: x = '\x01\x41\x42\x43'
哪种python始终打印为:

In [71]: x
Out[71]: '\x01ABC'

这使得调试变得很痛苦,因为我打印的字符串看起来不像我代码中的文本。如何将字符串打印为十六进制文字?

您可以尝试以下方法:

>>> x = '\x01\x41\x42\x43'
>>> x.encode('hex')
'01414243'


对于跨版本兼容的解决方案,请使用:

As
.encode('hex')
是对
encode
的误用,已在Python 3中删除:

Python 3.3.1
Type "help", "copyright", "credits" or "license" for more information.
>>> '\x01\x41\x42\x43'.encode('hex')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: hex
Python 3.3.1
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>“\x01\x41\x42\x43”。编码('hex')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
LookupError:未知编码:十六进制

要真正打印出字符串~literal(即,您可以剪切并粘贴回代码中以获得相同对象的内容),需要执行以下操作:

>>> x = '\x1\41\42\43'
>>> print "'" + ''.join(["\\"+ hex(ord(c))[-2:] for c in x]) + "'"
'\x1\41\42\43'

打印binascii.hexlify(数据)
@agf:我只是从中学到了一些东西。这是一个很好的问题和回答。我想对你的答案投赞成票。你能把它作为答案发布吗?或者像
x=r'\x01\x41\x42\x43'
@hivert那样分配它作为答案发布。@J.Katzwinkel它就不能作为二进制数据使用了。谢谢!你的回答对我来说已经足够接近了。我应该能够在打印中使用反斜杠,以便打印的是实际的文字。。。。
>>> import binascii
>>> x = '\x01\x41\x42\x43'
>>> print x
ABC
>>> repr(x)
"'\\x01ABC'"
>>> print binascii.hexlify(x)
01414243
Python 3.3.1
Type "help", "copyright", "credits" or "license" for more information.
>>> '\x01\x41\x42\x43'.encode('hex')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
LookupError: unknown encoding: hex
>>> x = '\x1\41\42\43'
>>> print "'" + ''.join(["\\"+ hex(ord(c))[-2:] for c in x]) + "'"
'\x1\41\42\43'