1

私はPythonを初めて使用し、組み込み関連の作業を行っています(私のプログラミング経験のほとんどはCを使用しています).

シリアル ポートから 4 バイトの float を bytearray に読み込んでいますが、通常のリトル エンディアン順の DCBA ではなく、CDAB としてエンコードされています。または、BADC としてエンコードされている可能性があります。(ここで、A は最上位バイトで、D は LSB です)。bytearray でバイトをスワップする正しい方法は何ですか?

たとえば、私は

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))

しかし、もっと良い方法があるはずです...

理想的には、好きなようにスライスして再連結したり、可能であればスライスを一度に置き換えたりしたいと考えています。

4

2 に答える 2

1

私は同じ問題に遭遇しましたが、最も近い答えはこのスレッドにあります。

Python3 では、解決策は次のとおりです。

b''.join((tmp[2:4],tmp[0:2]))
于 2020-01-28T11:42:18.723 に答える