0

この文字列をビッグエンディアンからリトルエンディアンに切り替えたいと思います。

\x00\x40

このようにする:

\x40\x00

使用する適切な関数はstruct.packだと思いますが、適切に機能させる方法が見つかりません。ちょっとした助けをいただければ幸いです。

ありがとう

4

4 に答える 4

6

コード全体を表示しているわけではないので、最も簡単な解決策は次のようになります。

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の間で変換する場合、どちらの方法で変換するかは関係ありません。変換機能は双方向です。

于 2010-02-03T04:07:00.740 に答える
5

data[::-1]任意のバイト数で機能します。

于 2010-02-03T05:01:46.030 に答える
0

little_endian = big_endian[1] + big_endian[0]

于 2010-02-03T04:09:22.323 に答える
0

ここで本当にやりたいことは、入力データをビッグ エンディアン (またはネットワーク) バイトオーダーからホスト バイトオーダー (それが何であれ) に変換することだと想像できます。

>>> from struct import unpack
>>> result = unpack('>H', '\x00\x40')

これは、スワップする必要のないビッグ エンディアンのマシンにコードを移動すると失敗するだけのスワップよりも移植性の高いアプローチです。

于 2011-03-13T11:40:01.200 に答える