この文字列をビッグエンディアンからリトルエンディアンに切り替えたいと思います。
\x00\x40
このようにする:
\x40\x00
使用する適切な関数はstruct.packだと思いますが、適切に機能させる方法が見つかりません。ちょっとした助けをいただければ幸いです。
ありがとう
この文字列をビッグエンディアンからリトルエンディアンに切り替えたいと思います。
\x00\x40
このようにする:
\x40\x00
使用する適切な関数はstruct.packだと思いますが、適切に機能させる方法が見つかりません。ちょっとした助けをいただければ幸いです。
ありがとう
コード全体を表示しているわけではないので、最も簡単な解決策は次のようになります。
data = data[1] + data[0]
あなたが使用を主張する場合struct
:
>>> from struct import pack, unpack
>>> unpack('<H', '\x12\x13')
(4882,)
>>> pack('>H', *unpack('<H', '\x12\x13'))
'\x13\x12'
これは、最初に文字列をリトルエンディアンのunsigned shortとして解凍し、次にビッグエンディアンのunsignedshortとしてパックし直します。もちろん、逆にすることもできます。BEとLEの間で変換する場合、どちらの方法で変換するかは関係ありません。変換機能は双方向です。
data[::-1]
任意のバイト数で機能します。
little_endian = big_endian[1] + big_endian[0]
ここで本当にやりたいことは、入力データをビッグ エンディアン (またはネットワーク) バイトオーダーからホスト バイトオーダー (それが何であれ) に変換することだと想像できます。
>>> from struct import unpack
>>> result = unpack('>H', '\x00\x40')
これは、スワップする必要のないビッグ エンディアンのマシンにコードを移動すると失敗するだけのスワップよりも移植性の高いアプローチです。