LEに保存する前にビッグエンディアンのデータが反転するのはなぜですか?

LEに保存する前にビッグエンディアンのデータが反転するのはなぜですか?

AがBEシステムで、LEシステムBにデータを送信するために0x44332211を送信しているとします。デフォルトでは、Aは0x44332211のhtonlを使用します。これはわずか0x44332211です。

0x44332211がBに達すると、BはそれがBE形式であることを知っているので、Bはhtonl関数を使用してそれを反転して0x11223344に変更します。

この反転はどういう意味ですか?私はインターネットでこの概念について読んだ。なぜ保管する前に裏返すべきですか?

なぜなら、この場合、反転した値0x11223344が0x44332211のようにLEに格納されるからですが、似ているように見てもBが違うように解釈したのでAが送ったものとは違うのでしょうか?

/* BEからLEへの変換*/

ベストアンサー1

ビッグエンディアンCライブラリの関数はhtonl()実際には何もしません(「no-ops」)。ntohl()これにより、同じコードがBEシステムとLEシステムで機能します。 C libでコンパイルすると、これらの関数はバイトを反転しますが、BEシステムではネットワークバイトシーケンスがビッグエンディアンであるため、変更されていません。ホストはすでにビッグエンディアンです。

つまり、あなたの例では、BEマシンAは何も変更しません。 LEマシンBのみ可能です。

おすすめ記事