エンディアン 【endianness】 バイトオーダー / byte order / エンディアンネス
コンピュータではメインメモリに1バイトずつデータを並べていくが、32ビット(4バイト)の整数型のように複数のバイトを繋げて全体で一つのデータを表す場合には、メモリアドレス(番地)の小さい側に上位桁側のバイトを置くか、逆に下位桁側から並べるか、ルールを決めておかなければならない。
この配置順のルールを「エンディアン」(endianness)あるいは「バイトオーダー」(byte order)という。最上位バイトから最下位バイトに向けて順に記録・送信する方式を「ビッグエンディアン」(big endian)、最下位バイトから最上位バイトに向けて順に記録・送信する方式を「リトルエンディアン」(little endian)という。
ちなみに、「エンディアン」の名称は、「ガリバー旅行記」の小人の国のエピソードに登場する、ゆで卵を丸い側(big end)から割る人々(ビッグエンディアン)と、尖った側(little end)から割る人々(リトルエンディアン)に由来するとされる。
例えば、16進数で「11223344」と表される4バイトのデータをメインメモリに保存する際、これをメモリの下位アドレスから上位アドレスに向けて「11」「22」「33」「44」の順に書き込んでいくのがビッグエンディアン、「44」「33」「22」「11」の順に書き込むのがリトルエンディアンとなる。
CPUにおけるエンディアン
メモリ上のエンディアンはCPU(マイクロプロセッサ)の種類によって規定されており、例えば米IBM社のメインフレームなどはビッグエンディアンを、米インテル(Intel)社のx86系プロセッサなどはリトルエンディアンを採用していることで知られる。
稀に、「33」「44」「11」「22」などと前半と後半を入れ替える「ミドルエンディアン」(middle endian)と呼ばれる方式や、ビッグエンディアンとリトルエンディアンを切り替えて使用できる「バイエンディアン」(bi-endian)と呼ばれる方式のプロセッサも存在する。
通信におけるエンディアン
通信プロトコルやファイル形式(フォーマット)でも、送り順や並び順で上位側と下位側のどちらが先かを定めたエンディアンが規定されていることがあり、プロセッサの種類に関わらず、仕様で定められたエンディアンでデータを取り扱うようソフトウェア側で対応しなければならない。
例えば、TCP/IPでは複数バイトのデータはビッグエンディアンで取り扱うと規定(ネットワークバイトオーダー)されている。Unicodeのように、ファイルの先頭にエンディアンを指定する特殊な符号(BOM:バイトオーダーマーク)を書き込むよう規定しているフォーマットもある。