2014-09-19 61 views
2

我想寫一個循環,以4B十六進制數字格式打印1到50000。不過,我需要十六進制數字是小尾數格式,顯示所有零到4B,並在開始時不顯示'0x'。如何在小尾數中打印十六進制數,填充零,並且在python中沒有'0x'?

示例:

數字50,000是十六進制0xc350。

我想打印:50C30000

這是我到目前爲止,我只是不知道如何添加零讓它成爲4B格式:

import struct 
print hex(struct.unpack('<H', struct.pack('>H', 50000)) [0]) [2:].upper() 
#Output is 50C3 

〜謝謝

回答

5

讓我們假設你有一個轉換爲little-endian的工作的一部分。你問的部分是如何將數字格式化爲特定的字符串。

這也正是format功能是什麼:

>>> h = 20675 
>>> format(h, '04X') 
50C3 

全部細節都在Format Specification Mini-Language,但簡要地說:

  • 'X'類型場,意爲「十六進制格式。輸出基數爲16的數字,使用9以上數字的大寫字母。「
  • '4'寬度字段,這意味着任何短於4個字符將被填充。
  • '0'是沒有名字,顯然,而是「由零之前的寬領域的...特殊情況下(‘0’)字符能夠簽署感知零填充數字類型,這相當於一個填充字符'0',對齊類型爲'='。「

但是讓我們重溫那第一句話。你不要有正確的字節交換,因爲你需要一個32位的小尾數,並且你正在創建一個16位的數字。這就是'H'的含義。如果你想要32位,你必須使用'I'

然後,當然,你需要的寬度改變從48

+0

鑑於我已經有,我可以以某種方式插入我有什麼格式()函數? – Ian004 2014-09-19 20:08:32

+0

@ Ian004:好的,我的''h'正是你從'struct.unpack(' H',50000))[0]'返回的東西。你能從那裏弄清楚嗎? – abarnert 2014-09-19 20:11:05

+0

是的,但我相信'X'類型字段將其轉換回標準十六進制,從而取消了我所做的endian格式。我的輸出現在是000050C3 – Ian004 2014-09-19 20:19:06

0

如何使用ljust

import struct 
print hex(struct.unpack('<H', struct.pack('>H', 50000)) [0]) [2:].upper().ljust(8, '0') 
#Outputs 50C30000 

證明了串到左邊,改變了字符串的長度爲8個字符,並且如果指定的任何填充字符,填充空的空間與該字符。這裏填充字符被添加到字符串的right