我是Python新手,正在做嵌入式相关工作(我的大部分编程经验都是使用C)。
我正在从串行端口将四字节浮点读入字节数组,但它不是正常的小端顺序 DCBA,而是编码为 CDAB。或者它可以被编码为BADC。 (其中 A 是最高有效字节,D 是 LSB)。在字节数组中交换字节的正确方法是什么?
比如我有
tmp=bytearray(pack("f",3.14))
我希望能够任意排列 tmp 中的字节,然后将其 unpack() 恢复为 float 。
在做任何与嵌入式系统相关的事情时,这样的事情似乎很重要,但要么我在谷歌上搜索错误,要么还没有明确的答案(还!)。
编辑: 当然,我可以做到这一点:
from struct import *
def modswap(num):
tmp=bytearray(pack("f",num))
res=bytearray()
res.append(tmp[2])
res.append(tmp[3])
res.append(tmp[0])
res.append(tmp[1])
return unpack('f',res)
def main():
print(modswap(3.14))
但是必须有更好的方法......
理想情况下,我希望能够根据需要进行切片和重新连接,或者如果可能的话,甚至一次替换一个切片。
最佳答案
您可以一步混合:
from struct import pack,unpack
def modswap(num):
tmp=bytearray(pack("f",num))
tmp[0],tmp[1],tmp[2],tmp[3] = tmp[2],tmp[3],tmp[0],tmp[1]
return unpack('f',tmp)
您可以修改字节数组的切片:
>>> data = bytearray(b'0123456789')
>>> data[3:7] = data[5],data[6],data[3],data[4]
>>> data
bytearray(b'0125634789')
关于python-3.x - 如何在 Python 中重新排列字节数组中的字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16995111/