Python3 将十六进制值列表转换为字节
我有一个字节列表,这些字节是以字符串的形式表示的。比如,当我在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倍。