You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何高效将十六进制编码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)

方案优势

  1. 无额外GC负担:binascii.unhexlify()直接读取bytearray内容,不需要先解码为字符串,避免了临时字符串对象的生成与回收。
  2. 性能提升:binascii模块底层由C实现,比纯Python的decode()+fromhex()组合快数倍,切片反转也是Python内置的高效操作,适合高频调用场景。
  3. 一步到位优化:若需要同时完成转换和反转,可合并为一行代码:
reversed_bytes = binascii.unhexlify(hex_data)[::-1]

内容的提问来源于stack exchange,提问作者Laurent Carrè

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 17:12:05