我有十六进制的字符串,例如' 01ff6fee32785e366f710df10cc542B4'我试图将它们(有效地)转换为2个字符的2个字符的int数组,如[1,255,...]。
我试过
c = '8db6796fee32785e366f710df10cc542B4'
c2=[int(x,16) for x in c]
但它只是一个接一个地取字符。 我可以不使用for循环(我可能错了,但如果认为它会慢一点)吗?
答案 0 :(得分:3)
你可以range(..)
超过长度为2的子串:
c = '8db6796fee32785e366f710df10cc'
c2=[int(c[i:i+2],16) for i in range(0,len(c),2)]
所以i
迭代字符串,步长为2,然后从i
到i+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)