【问题标题】:How to convert hex str into int array如何将十六进制字符串转换为整数数组
【发布时间】:2017-06-10 11:08:10
【问题描述】:

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

我试过了

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

但它只需要一个一个的字符。 我可以在不使用 for 循环的情况下做到这一点吗(我可能错了,但如果认为它会更慢)?

【问题讨论】:

  • 这是整个十六进制数?
  • 是的,长度为 32 个字符
  • 您的第一个示例 '01ff6fee32785e366f710df10cc' 是 27 个字符!
  • binascii.unhexlify() 适合你吗?它将 2 字符序列转换为二进制字节。
  • 哦,是的,我在复制粘贴时错过了一部分。对不起

标签: python arrays hex


【解决方案1】:

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

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

所以i 以 2 的步长迭代字符串,然后您使用 c[i:i+2]ii+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作为最后一个元素来解析。

【讨论】:

    【解决方案2】:

    另一种方法

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

    【讨论】:

      【解决方案3】:
      >>> 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]
      

      两个相对简单的解决方案,但如果字符串有奇数个字符,可能会或可能不是你想要的,这些会出错。

      【讨论】:

        猜你喜欢
        • 2015-11-29
        • 2014-12-15
        • 2013-12-07
        • 2017-08-12
        相关资源
        最近更新 更多