Python3 将十六进制值列表转换为字节

4 投票
1 回答
3157 浏览
提问于 2025-04-18 09:59

我有一个字节列表,这些字节是以字符串的形式表示的。比如,当我在Python3.3中打印这个列表时,输出是这样的:

DATA =  ['FF', 'FF', 'FF', 'FF']

我想把这些转换成字节,比如0xFF, 0xFF, 0xFF, 0xFF。我试过使用bytearray()这个函数,但它返回了一个错误。

我觉得我可能漏掉了什么简单的东西,但我在StackOverflow和谷歌上查了很久,还是没有找到解决办法。

谢谢!

1 个回答

6

使用 binascii.unhexlify() 来处理连接后的 'bytes' 数据:

import binascii

bytestring = binascii.unhexlify(''.join(DATA))

示例:

>>> import binascii
>>> DATA =  ['FF', 'FF', 'FF', 'FF']
>>> binascii.unhexlify(''.join(DATA))
b'\xff\xff\xff\xff'

请注意,这种方法 比手动转换为整数快得多

>>> import timeit
>>> timeit.timeit("bytes(int(x, 16) for x in DATA)", 'from __main__ import DATA')
1.7035537050105631
>>> timeit.timeit("unhexlify(''.join(DATA))", 'from __main__ import DATA; from binascii import unhexlify')
0.2515432750224136

速度差异达到了7倍。

撰写回答