如何将hex str转换为int数组

时间:2017-01-25 10:09:01

标签: python arrays hex

我有十六进制的字符串,例如' 01ff6fee32785e366f710df10cc542B4'我试图将它们(有效地)转换为2个字符的2个字符的int数组,如[1,255,...]。

我试过

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

但它只是一个接一个地取字符。 我可以不使用for循环(我可能错了,但如果认为它会慢一点)吗?

3 个答案:

答案 0 :(得分:3)

你可以range(..)超过长度为2的子串:

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

所以i迭代字符串,步长为2,然后从ii+2(不包括)c[i:i+2]获取长度为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作为解析的最后一个元素。

答案 1 :(得分: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]

两个相对简单的解决方案,但如果字符串的字符数奇数可能是您想要的字符,则会出错。

答案 2 :(得分:0)

另一种方法

hex_string = '8db6796fee32785e366f710df10cc542B4'
a = bytearray.fromhex(hex_string)
b = list(a)
print(b)