我有一个以字符串格式表示的字节列表,例如,当我在Python3.3中打印列表时,我得到以下输出:
DATA = ['FF', 'FF', 'FF', 'FF']
Run Code Online (Sandbox Code Playgroud)
我想将这些转换为字节,例如0xFF,0xFF,0xFF,0xFF.我尝试过bytearray()函数,但这会返回错误.
我猜我在这里错过了一些简单的东西,但我已经环顾了SO和谷歌并且到目前为止没有运气
谢谢!
由于bytes函数接受可迭代,您可以传递一个生成器
>>> bytes(int(x, 16) for x in DATA)
b'\xff\xff\xff\xff'
Run Code Online (Sandbox Code Playgroud)
这比Martijn的方法慢,但更短.
更新:或者,您可以使用bytes.fromhex方法
>>> bytes.fromhex(''.join(DATA))
b'\xff\xff\xff\xff'
Run Code Online (Sandbox Code Playgroud)
它似乎比Martijn的解决方案更快
In [24]: %timeit bytes(int(x, 16) for x in DATA)
100000 loops, best of 3: 2.84 µs per loop
In [25]: %timeit bytes.fromhex(''.join(DATA))
1000000 loops, best of 3: 377 ns per loop
In [26]: %timeit binascii.unhexlify(''.join(DATA))
1000000 loops, best of 3: 403 ns per loop
Run Code Online (Sandbox Code Playgroud)
使用binascii.unhexlify()上加入了"字节":
import binascii
bytestring = binascii.unhexlify(''.join(DATA))
Run Code Online (Sandbox Code Playgroud)
演示:
>>> import binascii
>>> DATA = ['FF', 'FF', 'FF', 'FF']
>>> binascii.unhexlify(''.join(DATA))
b'\xff\xff\xff\xff'
Run Code Online (Sandbox Code Playgroud)
请注意,这比使用手动转换为整数更快:
>>> 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
Run Code Online (Sandbox Code Playgroud)
这是一个7倍的速度差异.
| 归档时间: |
|
| 查看次数: |
1815 次 |
| 最近记录: |