2014-02-21 138 views
4

我有很多的預先存在的代碼,把字節數組作爲字符串,即打印字符串作爲十六進制字面蟒蛇

In [70]: x = '\x01\x41\x42\x43' 

的Python始終打印爲:

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

這使得調試痛苦,因爲我打印的字符串看起來不像我的代碼中的文字。如何將字符串打印爲十六進制文字?

+5

'打印binascii.hexlify(數據)' – agf

+2

@agf:我剛學的東西從。這是一個很好的問題和一個很好的答案。我想提高你的答案。你能把它作爲答案發布嗎? – hivert

+1

或指定爲'x = r'\ x01 \ x41 \ x42 \ x43''。 –

回答

2

對於跨版本兼容的解決方案,使用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 
+0

謝謝!你的回答足夠接近我的目的。我應該能夠使用反斜槓進行打印,以便打印的內容是實際的文字.... –

0

你可以嘗試這樣的事情:

>>> 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 
0

要實際打印出字符串〜文字(即你可以剪切和粘貼到您的代碼以獲得相同的對象)的事情,需要類似:

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