高效地将十六进制的Python字节数组转换为字节的字节数组

问题描述 投票:0回答:1

我想将 ASCII 十六进制编码的字节数组转换为直接字节

`` hex_data = b'010203040a0b0fff'

 data = bytearray.fromhex(hex_data)``

但这不起作用,因为 fromhex 方法需要字符串而不是字节数组。 我可以添加一个额外的步骤,例如:

data = bytearray.fromhex(hex_data.decode())

这应该可行,但是这会增加一个额外的处理过程以及一个由 GC 处理的对象。 最终目标是还反转字节数组,以便创建一个数组并将其反转。

目前我使用的是纯Python编程算法,效果很好

每秒执行第 100 次,并开始消耗一些大量的 CPU 时间。

这适用于 Python 3.7

python python-3.x hex
1个回答
0
投票

最终目标也是反转字节数组,以便创建一个数组并将其反转。

您可以在不进行字符串解码的情况下反转它,但您仍然需要以一种或另一种方式将十六进制 ascii 文字转换为数字。而且还是手术。

>>> hex_data = b'010203040a0b0fff'
>>> numbers = [int(hex_data[i : i + 2], 16) for i in range(0, len(hex_data), 2)]
>>> numbers
[1, 2, 3, 4, 10, 11, 15, 255]
>>> bytearray(reversed(numbers))
bytearray(b'\xff\x0f\x0b\n\x04\x03\x02\x01')
© www.soinside.com 2019 - 2024. All rights reserved.