看看這個:Python,打印十六進制刪除第一個0?
fc = '0x'
for i in b[0x15c:0x15f]:
fc += hex(ord(i))[2:]
比方說這個代碼中發現的十六進制00 04 0F,而不是,它會刪除第一個0寫這樣的說法,並寫道:04F 任何幫助嗎?
看看這個:Python,打印十六進制刪除第一個0?
fc = '0x'
for i in b[0x15c:0x15f]:
fc += hex(ord(i))[2:]
比方說這個代碼中發現的十六進制00 04 0F,而不是,它會刪除第一個0寫這樣的說法,並寫道:04F 任何幫助嗎?
發生這種情況,因爲hex()
將不包括任何前導零,例如:
>>> hex(15)[2:]
'f'
爲了確保您始終獲得兩個字符,您可以使用str.zfill()
在必要時添加前導零:
這裏是wha t將其看起來就像在你的代碼:
fc = '0x'
for i in b[0x15c:0x15f]:
fc += hex(ord(i))[2:].zfill(2)
print ["0x%02x"%ord(i) for i in b[0x15c:0x15f]]
使用的格式字符串"%2x"
告訴它格式化爲2個字符寬,同樣"%02x"
它告訴墊與0的
注意,這仍然會刪除前導0的東西有超過2的十六進制值 例如:"0x%02x"%0x0055 => "0x55"
它仍然只是一個圖形表示方便您。
該值實際上沒有從數據中剝離,只是在視覺上縮短了。這裏
完整說明,爲什麼它是爲什麼這並不重要:Why are hexadecimal numbers prefixed with 0x?
沒有,它是從數據中剝離,我想打印輸出,它給不同的值,04F是太超過00040F – thethiny 2013-04-08 17:32:23
>>> map("{:02x}".format, (10, 13, 15))
['0a', '0d', '0f']
這是waaaaay比最上面的答案更pythonic! +1! – Antonvh 2016-09-11 18:01:34
太大的不同'的我在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
最後, s! – monojohnny 2015-12-01 22:14:50
我不會說它正確解釋,我不是最好解釋。它忽略前導零,因爲它們對十六進制值的十進制值沒有任何意義。它們表示值佔用的字節數。 15 = f。 0f = 15,因爲0 + 15是15 – 2018-01-03 15:04:49