エンディアン - ビッグエンディアンとリトルエンディアン

バイト順

エンディアン順は、メモリに格納されたマルチバイト・データを指し

 

メモリアドレスハイエンドとローエンドのアドレス。ローエンドアドレスが上位バイトを格納することができる、請求、下位バイトを格納することができます。

  • ビッグエンディアンは上位バイトのストレージの低アドレス末尾を参照します。
  • リトルエンディアンは下位バイトのストレージの低アドレス末尾を参照します。

 

第二に、なぜエンディアンに注意してください

あなたは下のスタンドアロン環境でのみ実行するプログラムを作成し、他の人にはない、とに対処するための手順場合は、バイト順の存在を無視することができます。

しかし、あなたのプログラムは、他の誰が対話型プログラムを行う生成したくない場合は?例えば、C / C ++プログラムは、Javaプログラムと対話します:

  • C / C ++言語を書かれた順に格納されたプログラムデータは、CPUプラットフォームでコンパイルされている該当する場合、現在はより一般的なx86プロセッサリトルエンディアンであります

  • ビッグエンディアンを使用してJavaで書かれたプログラムは、データを格納するための唯一の方法であります

あなたのC / C ++プログラム変数があればちょうど考えて、  a = 0x12345678 Javaプログラムの最初のアドレスに渡され、Javaのためデータの格納にビッグエンディアンの方法を取るために、あなたのデータに変換されることが自然です  0x78563412明らかに、疑問が生じます!

さらに、ネットワーク伝送は、一般に、としても知られているビッグエンディアン、使用するネットワークバイト順、又はネットワーク順序を2つのホストが変換されたデータバイトシーケンスを送信する前に、異なるバイト順を使用して通信するときにネットワークバイト順の前に送信されなければなりません。

 

第三に、ネットワークホストシーケンスシーケンス

ネットワークバイト順序:TCP / IPプロトコル層は、ビッグエンディアンのバイトのシーケンスとして定義され、使用さそうエンディアンTCP / IPプロトコルは、ビッグエンディアンです。

ホストバイトオーダー:メモリに格納されたシーケンス内の整数は、今でリトルエンディアンがより一般的です。(異なるCPUが異なるバイトオーダーを持っています)

通常は、ネットワーク通信中にホストとネットワークの順序シーケンスを変換するために適切な関数を呼び出す必要があります。バークレーソケットAPIは、16を変換し、ネットワーク及び配列ネイティブバイトオーダの間、32ビット整数の変換関数のセットを定義します。htonl、htons配列、天然配列のためにネットワークに変換天然配列を変換するネットワークのntohl、ntohs順序。

 

233


https://songlee24.github.io/2015/05/02/endianess/

おすすめ

転載: www.cnblogs.com/lemos/p/12004074.html