2013-05-15 171 views
9

我在試圖找到一種方法來打印十六進制的字符串。例如,我有這個字符串,然後轉換爲它的十六進制值。Python:以十六進制打印變量

my_string = "deadbeef" 
my_hex = my_string.decode('hex') 

如何打印my_hex0xde 0xad 0xbe 0xef?謝謝。

爲了讓我的問題清楚...假設我有一些數據存儲在一個變量中,如0x01, 0x02, 0x03, 0x04。現在我需要用十六進制打印它,以便我可以讀取它。我想我正在尋找一個相當於printf("%02x", my_hex)的python。我知道有print '{0:x}'.format()但這不會與my_hex一起工作,它也不會填充零。

回答

17

你的意思是你有一個字節的字符串my_hex你想打印出十六進制數字,對吧?例如,從你的例子:

>>> my_string = "deadbeef" 
>>> my_hex = my_string.decode('hex') # python 2 only 
>>> print my_hex 
Þ ­ ¾ ï 

下面是做這件事:

>>> print " ".join(hex(ord(n)) for n in my_hex) 
0xde 0xad 0xbe 0xef 

的理解打破了字符串轉換成字節,ord()每個字節轉換爲相應的整數,hex()格式每個整數從0x##。然後我們在兩者之間添加空格。

獎勵:如果您對unicode字符串使用此方法,那麼理解會爲您提供unicode字符(不是字節),即使它們大於兩位數字,您也會得到相應的十六進制值。

+0

這就是我要找的。謝謝。 – Yaw

+0

只是要注意這不會在Python 3.x上工作,而'unhexlify'solution將... –

+0

哪個部分不起作用? 'ord'? – alexis

1
print " ".join("0x%s"%my_string[i:i+2] for i in range(0,len(my_string),2)) 
使用 string作爲變量名,即使作爲一個例子變量名

這樣

>>> my_string = "deadbeef" 
>>> print " ".join("0x%s"%my_string[i:i+2] for i in range(0,len(my_string),2)) 
0xde 0xad 0xbe 0xef 
>>> 

在一個不相關的邊注...是非常不好的做法

+0

這看起來像將一個字符串分成幾對字符。我不需要那個。 – Yaw

+0

+1用於使用'string'作爲變量名稱。用變量覆蓋基本類型可能會導致令人難以置信的調試失敗,請相信我。 – Valdogg21

+0

@ Valdogg21:'string'不是基本類型 - 即'str'。但是,它是stdlib模塊的名稱。 – DSM

0

字符串轉換爲整數然後以16進製爲基數。

print hex(int(string, base=16)) 

這些是內置函數。

http://docs.python.org/2/library/functions.html#int

>>> string = 'AA' 
>>> _int = int(string, base=16) 
>>> _hex = hex(_int) 
>>> print _int 
170 
>>> print _hex 
0xaa 
>>> 
+0

我不認爲這是他想要的... –

1

你可以嘗試這樣的事情我想

new_str = "" 
str_value = "rojbasr" 
for i in str_value: 
    new_str += "0x%s " % (i.encode('hex')) 
print new_str 

你的產出將是類似的東西

0x72 0x6f 0x6a 0x62 0x61 0x73 0x72 
+0

這不是什麼OP是要求.... –

+0

我雖然他想將一個字符串轉換爲十六進制,而不是把它分成2對。它是我的錯,我沒有看到示例輸出 –

+1

不是你的錯,如果你看歷史,你會看到原來的問題是這樣讀的。 OP無法決定爲他/她的變量命名,但我認爲我爲他/她修復了這個問題...... – alexis

1

的路要走,如果你輸入的字符串是不是十六進制字符的有效配對會失敗......

>>> import binascii 
>>> ' '.join(hex(ord(i)) for i in binascii.unhexlify('deadbeef')) 
'0xde 0xad 0xbe 0xef' 
0

與後來的打印/格式式樣另一個答案是:

res[0]=12 
res[1]=23 
print("my num is 0x{0:02x}{1:02x}".format(res[0],res[1]))