我正在尝试使用 Python 中的 NumPy 进行字节交换。
我创建了一个函数swap32(),该函数通过字节交换由 32 位整数组成的数组的字节表示形式。我提供了一个小端字节对象 (brr) 作为下面代码中的输入,然后函数交换它的字节以将其转换为大端。我的代码产生的输出如下所示(顺便说一句,这是错误的)。
>>> import numpy as np
>>> def swap32(x):
... y = bytearray(x)
... a = np.array(y, dtype=np.uint32)
... return bytes(a.byteswap())
>>> arr = [1,2,3,4,5]
>>> brr = bytes(arr)
>>> brr
b'\x01\x02\x03\x04\x05'
>>> swap32(brr)
b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05'
如果我brr再次进行 byteswap,则会得到以下结果,这是不正确的,因为 swap32(swap32(brr)) 应该返回原始的 brr。
>>> swap32(y)
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05'
我肯定在某个地方出错了,我无法弄清楚。在Python中没有任何标准方法(或简单方法)来交换bytes对象的字节吗?
不负相思意
相关分类