如何高效将十六进制编码bytearray转为普通bytes并反转(Python3.7)
高效处理ASCII十六进制bytearray转bytes并反转(Python 3.7)
问题背景
需要将ASCII十六进制编码的bytearray转换为普通bytes,最初尝试的代码报错:
hex_data = b'010203040a0b0fff' data = bytearray.fromhex(hex_data)
原因是bytearray.fromhex()仅接受字符串参数,因此改为解码后再转换:
data = bytearray.fromhex(hex_data.decode())
该方法可行,但额外的解码步骤会生成临时字符串,增加GC负担。最终目标还需反转bytearray,当前纯Python实现每秒执行数百次,CPU消耗过高,需要适配Python 3.7的高效方案。
高效解决方案
使用binascii.unhexlify()直接处理bytearray(它支持bytes及其子类输入),结合切片反转操作,全程无临时字符串生成:
import binascii hex_data = b'010203040a0b0fff' # 直接转换为bytes,无需解码 raw_bytes = binascii.unhexlify(hex_data) # 高效反转bytes reversed_bytes = raw_bytes[::-1] # 若需要bytearray类型 reversed_bytearray = bytearray(reversed_bytes)
方案优势
- 无额外GC负担:
binascii.unhexlify()直接读取bytearray内容,不需要先解码为字符串,避免了临时字符串对象的生成与回收。 - 性能提升:
binascii模块底层由C实现,比纯Python的decode()+fromhex()组合快数倍,切片反转也是Python内置的高效操作,适合高频调用场景。 - 一步到位优化:若需要同时完成转换和反转,可合并为一行代码:
reversed_bytes = binascii.unhexlify(hex_data)[::-1]
内容的提问来源于stack exchange,提问作者Laurent Carrè
相关产品推荐
相关产品推荐

