【问题标题】:Covert Hexademcial String to Byte list in Python在 Python 中将十六进制字符串转换为字节列表
【发布时间】:2022-01-07 19:14:47
【问题描述】:

如何转换十六进制字符串 = a5acf29e4d11f20b6dee54bf369ee0f8

至此 = (bytes([0xa5, 0xac, 0xf2, 0x9e, 0x4d, 0x11, 0xf2, 0x0b, 0x6d, 0xee, 0x54, 0xbf, 0x36, 0x9e, 0xe0, 0xf8])

我尝试了两种方法,但它们以不同的格式显示。

  1. 使用 bytes.fromhex()
>>> bytes.fromhex('a5acf29e4d11f20b6dee54bf369ee0f8')
b'\xa5\xac\xf2\x9eM\x11\xf2\x0bm\xeeT\xbf6\x9e\xe0\xf8'
  1. 使用 unhexlify
>>> import binascii
>>> from binascii import unhexlify
>>> unhexlify('a5acf29e4d11f20b6dee54bf369ee0f8')
b'\xa5\xac\xf2\x9eM\x11\xf2\x0bm\xeeT\xbf6\x9e\xe0\xf8'

但是,两种格式的类型是相同的。

>>> type(bytes([0xa5, 0xac, 0xf2, 0x9e, 0x4d, 0x11, 0xf2, 0x0b, 0x6d, 0xee, 0x54, 0xbf, 0x36, 0x9e, 0xe0, 0xf8]))
<class 'bytes'>
>>> type(b'\xa5\xac\xf2\x9eM\x11\xf2\x0bm\xeeT\xbf6\x9e\xe0\xf8')
<class 'bytes'>

无论如何,我只想以字节列表格式显示最终格式

(bytes([0xa5, 0xac, 0xf2, 0x9e, 0x4d, 0x11, 0xf2, 0x0b, 0x6d, 0xee, 0x54, 0xbf, 0x36, 0x9e, 0xe0, 0xf8])

有人可以建议我如何实现这一目标吗?

【问题讨论】:

  • 您是否尝试迭代 b'\xa5\xac\xf2\x9eM\x11\xf2\x0bm\xeeT\xbf6\x9e\xe0\xf8' ?你已经得到了你需要的东西。
  • 我认为您不能这样做并保留类型; bytes([0xa5, 0xac, 0xf2, 0x9e, 0x4d, 0x11, 0xf2, 0x0b, 0x6d, 0xee, 0x54, 0xbf, 0x36, 0x9e, 0xe0, 0xf8]) 是有效的输入形式,但不是有效的输出形式。您能解释一下您要解决的问题吗?
  • @snakecharmerb 我正在使用一个 API,它需要 bytes[] 格式的参数,输入字符串是十六进制字符串,如果我通过 bytes.fromhex(str) 它将不起作用,仅当我像 bytes([0xa5, 0xac....]) 那样对其进行硬编码时才有效
  • 你试过用 bytearray.fromhex 代替 bytes.fromhex 吗?
  • bytes([...]) 有效,而b'\x...' 无效,这令人惊讶。 Both are equals

标签: python hex byte


【解决方案1】:

由于您要求以特定格式显示,因此您可以轻松地这样做,因为您的可变数据类型的成本

这样的事情可能会奏效

bytes_from_hex = bytearray.fromhex('a5acf29e4d11f20b6dee54bf369ee0f8')
print("bytes([",", ".join([hex(b) for b in bytes_from_hex]),"])")

for_disp = "bytes(["+", ".join([hex(b) for b in bytes_from_hex])+"])"
print(for_disp)
print(type(for_disp))

如果您希望 byte[] 访问 API,则显示无关紧要,这样的事情应该可以工作

bytearray.fromhex('a5acf29e4d11f20b6dee54bf369ee0f8')

【讨论】:

    猜你喜欢
    • 2021-08-29
    • 2016-05-05
    • 2023-03-07
    • 2022-06-18
    • 2017-08-23
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 2019-07-27
    相关资源
    最近更新 更多