2014-08-27 59 views
0

當使用兩個數字我有下面的代碼行:力str.format()來顯示hexidecimals

print "{: ^#6x}".format(val),

其(部分)產生以下輸出:

0x1 0x0 0x0 0x0 0x3 0xb2 0x0 0x0 0x3 0x0 0x3 0x0 0x2b 0x0 0x0 0x0 0xb 0x0 0xb 0x0 0x20 0x0 0x0 0x0

這是所有罰款和丹迪,但爲了幫助事情排隊,看起來更好,我想迫使十六進制數字都是兩位數字,即0x00。但是,當我嘗試向格式說明符(即{: ^#6.2x})添加精度時,它會給我提供錯誤ValueError: Precision not allowed in integer format specifier。我如何強制十六進制總是顯示兩位數字?

回答

0

你會使用#04x墊輸出到2個位數與0x前綴,然後再格式,爲滿足您的6個字符的寬度:

print format(format(val, '#04x'), '^6'), 

我用format() function,而不是因爲你沒有插值成一個更大的字符串。

因爲現在場將是4個字符寬,總是,你也可以直接硬編碼兩個空間用字符串格式填充:

print ' {:#04x} '.format(val), 

演示:

>>> format(3, '#04x') 
'0x03' 
>>> format(format(3, '#04x'), '^6') 
' 0x03 ' 
>>> ' {:#04x} '.format(3) 
' 0x03 '