2017-01-25 31 views
1

我有十六進制字符串,例如'01ff6fee32785e366f710df10cc542B4',我試圖通過2個字符[1,255,...]將它們(高效)轉換爲int數組2個字符。如何將十六進制轉換爲int數組

我試圖

c = '8db6796fee32785e366f710df10cc542B4' 
c2=[int(x,16) for x in c] 

但是隻需要人物一個接一個。 我可以做到這一點,而不使用循環(我可能是錯的,但如果認爲它會更慢)?

+0

這是整個十六進制數? –

+0

是的它的長度是32個字符 – Grimsovitch

+1

你的第一個例子'01ff6fee32785e366f710df10cc'是27個字符! – cdarke

回答

2

你可以range(..)在長度爲2的字符串:

c = '8db6796fee32785e366f710df10cc' 
c2=[int(c[i:i+2],16) for i in range(0,len(c),2)] 

所以i用2步的字符串進行迭代,並且你把長2從ii+2(獨家)與c[i:i+2]一子。這些你通過採取int(..,16)進行轉換。

爲您的樣品輸入它生成:

>>> c='8db6796fee32785e366f710df10cc' 
>>> [int(c[i:i+2],16) for i in range(0,len(c),2)] 
[141, 182, 121, 111, 238, 50, 120, 94, 54, 111, 113, 13, 241, 12, 12] 

的最後一個元素是12因爲你的字符串的長度爲奇數,所以它需要c作爲解析的最後一個元素。

+0

這似乎很好,謝謝! – Grimsovitch

0
>>> c = '8db6796fee32785e366f710df10c' 
>>> [int(x) for x in bytearray.fromhex(c)] 
[141, 182, 121, 111, 238, 50, 120, 94, 54, 111, 113, 13, 241, 12] 
>>> list(map(int, bytearray.fromhex(c))) 
[141, 182, 121, 111, 238, 50, 120, 94, 54, 111, 113, 13, 241, 12] 

兩個相對簡單的解決方案,但如果字符串有奇數個字符,可能會或可能不是您想要的,這些錯誤會出錯。

相關問題