【问题标题】:Create list of hex from string从字符串创建十六进制列表
【发布时间】:2020-11-20 15:05:59
【问题描述】:

我正在尝试将字符串转换为十六进制列表:

myString = b'abcdefghijh'

hex = codecs.encode(myString, "hex")
print(hex)
print(list(hex))

但是这给了我结果:

b'6162636465666768696a68'
[54, 49, 54, 50, 54, 51, 54, 52, 54, 53, 54, 54, 54, 55, 54, 56, 54, 57, 54, 97, 54, 56]

谁能告诉我为什么 2 不匹配?

【问题讨论】:

  • 他们为什么会匹配?虽然 bytes 以类似字符串的方式显示,但当您迭代 bytes 对象时,您会得到单独的整数。
  • 好的,谢谢。那么如何将字节对象拆分为十六进制列表?
  • 完美匹配:bytes.fromhex(b'abcdefghijh'.hex())
  • 您可以使用map 将整数列表映射到hex 列表 -> `lst = list(map(hex, lst))'

标签: python python-3.x codec


【解决方案1】:

您需要将bytes 对象转换为str:

import codecs
myString = b'abcdefghijh'

hex = codecs.encode(myString, "hex")

print(hex)
print(list(str(hex)[2:-1]))

b'6162636465666768696a68'

输出:

b'6162636465666768696a68'
['6', '1', '6', '2', '6', '3', '6', '4', '6', '5', '6', '6', '6', '7', '6', '8', '6', '9', '6', 'a', '6', '8']

(请注意,我在 byte 对象的两端为 list 剥离了 b' 和 '。)


更新(感谢@MrFuppes):

使用内置方法命名的变量是一种不好的做法,因此应将hex 命名为my_hex。

您可以使用map 将整数列表映射到hex 列表中:

lst = list(map(hex, lst))

【讨论】:

    【解决方案2】:
    myString = b'abcdefghijh'
    hex = codecs.encode(myString, "hex")
    print(hex)
    # b'6162636465666768696a68'
    

    您在此处看到的输出实际上是十六进制表示的字节对象。这意味着hex 对象中的第一个字节是 '6' 的 ASCII 字节表示,第二个字节是 '1' 的 ASCII 字节表示,以此类推。 为了方便您打印到控制台,Python 将其转换回字符。

    所以当你这样做时:

    print(list(hex))
    # [54, 49, 54, 50, 54, 51, 54, 52, 54, 53, 54, 54, 54, 55, 54, 56, 54, 57, 54, 97, 54, 56]
    

    你看到的数字是上述字节的整数表示(54是字符'6'的十进制ASCII码,49是字符'1'的十进制ASCII码等)

    【讨论】:

      猜你喜欢
      • 2011-08-05
      • 1970-01-01
      • 2013-04-12
      • 2022-01-24
      • 1970-01-01
      • 2010-12-27
      • 2010-10-04
      • 2014-03-07
      • 2011-01-15
      相关资源
      最近更新 更多