2013-02-03 189 views
46

如何將十進制轉換爲以下格式的十六進制(至少兩位數,零填充,沒有0x前綴)?Python十六進制

輸入:255輸出:ff

輸入:2輸出:02

我試圖hex(int)[2:]但似乎它顯示的第一個例子,但不是第二個。

+0

[你嘗試過什麼?](http://whathaveyoutried.com)爲什麼我downvoted這個問題:http://meta.stackexchange.com/a/149138/133242 –

+0

我試過十六進制(int)[2 :]但它似乎顯示第一個例子,但不是第二個。 –

+0

我懂了!謝謝 –

回答

104

'02x'的格式使用format() function

>>> format(255, '02x') 
'ff' 
>>> format(2, '02x') 
'02' 

02部分告訴format()使用至少2位數字,並使用零來填充它的長度,x意味着小寫十六進制。

Format Specification Mini Language也給你X大寫十六進制輸出,並可以與#前綴字段寬度爲包括0x0X或前綴(取決於你閹羊使用xX作爲格式化器)。只是考慮到你需要調整字段寬度允許這些額外的2個字符:

>>> format(255, '02X') 
'FF' 
>>> format(255, '#04x') 
'0xff' 
>>> format(255, '#04X') 
'0XFF' 
+0

謝謝!很好的解釋。 –

+0

我有一個問題,如果將格式設置爲使用大寫十六進制輸出,十六進制前綴將具有大寫「X」。這在你的例子中似乎不是這種情況。這只是我的本地版本的Python的問題嗎?我使用的是2.7.9版本。 – jwp36

+0

@ jwp36:不,這是我的答案中的錯誤,現在已更正。我很抱歉。 –

15

我想這是你想要什麼:

>>> def twoDigitHex(number): 
...  return '%02x' % number 
... 
>>> twoDigitHex(2) 
'02' 
>>> twoDigitHex(255) 
'ff' 
-7

第一個答案是最好的,但我有一個古老的答案,但功能

>>> "".join(list(hex(255))[2:]) 
'ff' 
+2

與另一個答案一樣,這不是零墊。例如,'「」.join(list(hex(2))[2:])評估爲「2」,而不是「02」。 – therealrootuser

+1

這與問題的'hex(int)[2:]'同義。爲什麼你只是爲了再次加入而創建一個列表? – wjandrea

+0

爲什麼發佈這個答案,如果你已經同意有一個更好的? – ryry1985