【发布时间】: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