我有很多的預先存在的代碼,把字節數組作爲字符串,即打印字符串作爲十六進制字面蟒蛇
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''。 –