在 Python 中将十六进制字符串转换为字节列表

Posted

技术标签:

【中文标题】在 Python 中将十六进制字符串转换为字节列表【英文标题】:Covert Hexademcial String to Byte list in 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])

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

    使用 bytes.fromhex()
>>> bytes.fromhex('a5acf29e4d11f20b6dee54bf369ee0f8')
b'\xa5\xac\xf2\x9eM\x11\xf2\x0bm\xeeT\xbf6\x9e\xe0\xf8'
    使用 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 【参考方案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')

【讨论】:

以上是关于在 Python 中将十六进制字符串转换为字节列表的主要内容,如果未能解决你的问题,请参考以下文章

在python中将字节转换为位

在 Python 中将整数转换为 2 字节的十六进制值

在 Python 3 中将二进制字符串转换为字节数组

在Python 3中将十六进制字符串(python 2)转换为带有十六进制数字的字节

如何在 Python 中将字符串转换为字节数组

在Python中将IP地址字符串转换为二进制