我有很多的预先存在的代码,把字节数组作为字符串,即打印字符串作为十六进制字面蟒蛇
In [70]: x = '\x01\x41\x42\x43'
的Python始终打印为:
In [71]: x
Out[71]: '\x01ABC'
这使得调试痛苦,因为我打印的字符串看起来不像我的代码中的文字。如何将字符串打印为十六进制文字?
我有很多的预先存在的代码,把字节数组作为字符串,即打印字符串作为十六进制字面蟒蛇
In [70]: x = '\x01\x41\x42\x43'
的Python始终打印为:
In [71]: x
Out[71]: '\x01ABC'
这使得调试痛苦,因为我打印的字符串看起来不像我的代码中的文字。如何将字符串打印为十六进制文字?
对于跨版本兼容的解决方案,使用binascii.hexlify
:
>>> import binascii
>>> x = '\x01\x41\x42\x43'
>>> print x
ABC
>>> repr(x)
"'\\x01ABC'"
>>> print binascii.hexlify(x)
01414243
作为.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
谢谢!你的回答足够接近我的目的。我应该能够使用反斜杠进行打印,以便打印的内容是实际的文字.... –
你可以尝试这样的事情:
>>> x = '\x01\x41\x42\x43'
>>> x.encode('hex')
'01414243'
或
>>> x = r'\x01\x41\x42\x43'
>>> x
'\\x01\\x41\\x42\\x43'
或
>>> x = '\x01\x41\x42\x43'
>>> print " ".join(hex(ord(n)) for n in x)
0x1 0x41 0x42 0x43
要实际打印出字符串〜文字(即你可以剪切和粘贴到您的代码以获得相同的对象)的事情,需要类似:
>>> x = '\x1\41\42\43'
>>> print "'" + ''.join(["\\"+ hex(ord(c))[-2:] for c in x]) + "'"
'\x1\41\42\43'
'打印binascii.hexlify(数据)' – agf
@agf:我刚学的东西从。这是一个很好的问题和一个很好的答案。我想提高你的答案。你能把它作为答案发布吗? – hivert
或指定为'x = r'\ x01 \ x41 \ x42 \ x43''。 –