2013-04-08 86 views

回答

21

發生這種情況,因爲hex()將不包括任何前導零,例如:

>>> hex(15)[2:] 
'f' 

爲了確保您始終獲得兩個字符,您可以使用str.zfill()在必要時添加前導零:

​​

這裏是wha t將其看起來就像在你的代碼:

fc = '0x' 
for i in b[0x15c:0x15f]: 
    fc += hex(ord(i))[2:].zfill(2) 
+0

太大的不同'的我在b [0x15c:0x15f]: \t \t H =十六進制(ORD(I))[2:] \t \t如果len(H)= 2:1 H = '0' + H \t \t FC + = h;' 一個朋友告訴這個將起作用 – thethiny 2013-04-08 17:25:02

+0

最後, s! – monojohnny 2015-12-01 22:14:50

+0

我不會說它正確解釋,我不是最好解釋。它忽略前導零,因爲它們對十六進制值的十進制值沒有任何意義。它們表示值佔用的字節數。 15 = f。 0f = 15,因爲0 + 15是15 – 2018-01-03 15:04:49

2
print ["0x%02x"%ord(i) for i in b[0x15c:0x15f]] 

使用的格式字符串"%2x"告訴它格式化爲2個字符寬,同樣"%02x"它告訴墊與0的

注意,這仍然會刪除前導0的東西有超過2的十六進制值 例如:"0x%02x"%0x0055 => "0x55"

0

它仍然只是一個圖形表示方便您。
該值實際上沒有從數據中剝離,只是在視覺上縮短了。這裏

完整說明,爲什麼它是爲什麼這並不重要:Why are hexadecimal numbers prefixed with 0x?

+1

沒有,它是從數據中剝離,我想打印輸出,它給不同的值,04F是太超過00040F – thethiny 2013-04-08 17:32:23

11
>>> map("{:02x}".format, (10, 13, 15)) 
['0a', '0d', '0f'] 
+3

這是waaaaay比最上面的答案更pythonic! +1! – Antonvh 2016-09-11 18:01:34