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

4

我有一个以字符串形式表示的字节列表,例如,在Python3.3中打印列表时,我会得到以下输出:

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

我想把它们转换成字节,例如0xFF、0xFF、0xFF、0xFF。我尝试了bytearray()函数,但是出现了错误。
我猜我在这里漏掉了一些简单的东西,但是我在SO和Google上查找了一下,目前还没有找到任何线索。
谢谢!
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倍的速度差异。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接