技術系サラリーマン勉強記

数学、物理、プログラミングなど日々勉強した内容を取り扱っていきます。

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

多バイトのデータをメモリに格納する際にどうような順番でバイトを格納していくか問題になります。このメモリに格納する順番をバイトオーダーと呼びます。バイトオーダーの種類は二種類あり、これがビッグエンディアンとリトルエンディアンと呼ばれているものです。

ビッグエンディアンは、多バイトデータの桁の大きいバイトから順に低位のアドレスに格納していきます。

一方、リトルエンディアンは、多バイトデータの桁の小さいバイトから順に低位のアドレスに格納していきます。

例を示します。今、4バイトのデータ 0x12345678 があるとします。1バイトずつ区切ると、0x12 / 0x34 / 0x56 / 0x78 となります。このデータをメモリの0x1000番地から0x1003番地までに格納することにします。

  • ビッグエンディアンで格納した場合:0x12 / 0x34 / 0x56 / 0x78
    • 0x1000番地 -> 0x12
    • 0x1001番地 -> 0x34
    • 0x1002番地 -> 0x56
    • 0x1003番地 -> 0x78
  • トルエンディアンで格納した場合:0x78 / 0x56 / 0x34 / 0x12
    • 0x1000番地 -> 0x78
    • 0x1001番地 -> 0x56
    • 0x1002番地 -> 0x34
    • 0x1003番地 -> 0x12

このようにデータが格納されていきます。参考: Endian(エンディアン)ってなに? | 学校では教えてくれないこと | [技術コラム集]組込みの門 | ユークエスト株式会社

ビッグエンディアンとリトルエンディアンのどちらのバイトオーダーを使うかは、CPUの種類や通信プロトコルの種類によって決められています。もしくは両方に対応していたりもします。

なぜ二つの方法があるかは色々歴史がややこしそうです。どちらの方法もメリット・デメリットがあるそうです。下サイトに色々書いてありました。

www.ertl.jp

二種類のバイトオーダーについて昔聞いたことがありましたが、改めて調べてみて昔より理解できたような気がします。

参考文献