エンディアンとは?バイトオーダーの仕組みをわかりやすく解説

この記事の要点

バイト列をすぐに変換・確認したい方へ

エンディアン変換ツールで両方の並びと数値を確認できます。

エンディアン変換ツールを使う

エンディアンとは何か

エンディアン(endianness)とは、2バイト以上で構成される数値をメモリ、ファイル、通信データに格納するときのバイトの並び順です。バイトオーダーとも呼ばれます。

たとえば32ビットの整数0x12345678は、12345678という4バイトで構成されます。この4バイトを先頭からどの順番で置くかがエンディアンの違いです。

バイトオーダーの考え方

16進数2桁は1バイトです。0x12345678では、左端の12が数値への影響が最も大きい最上位バイト、右端の78が最も小さい最下位バイトです。

0x12 | 0x34 | 0x56 | 0x78
上位 ← 数値としての重み → 下位

1バイトの値は並べ替える対象がないため、通常はエンディアンの違いがありません。違いが現れるのは、16ビット、32ビット、64ビットなどの複数バイト値です。

Big EndianとLittle Endian

方式先頭に置くバイト0x12345678の配置
Big Endian最上位バイト12 34 56 78
Little Endian最下位バイト78 56 34 12

どちらも同じ値を表せます。違うのは保存時の配置です。ただし、Little Endianのバイト列をBig Endianとして読むと0x78563412になり、本来とは別の数値として解釈されます。

なぜ複数の方式があるのか

CPUアーキテクチャやシステム設計の歴史によって、採用されたバイト順が異なるためです。現在も既存ソフトウェアやデータ形式との互換性が必要なので、片方へ完全に統一されてはいません。

重要なのは、どちらが正しいかではなく、扱うデータの仕様と一致しているかです。データを作る側と読む側が同じバイトオーダーを使えば、値を正しく共有できます。

エンディアンが使われる場面

場面代表例確認するもの
CPU・メモリx86・x86-64はLittle Endian実行環境のアーキテクチャ
ネットワークネットワークバイトオーダーはBig Endian通信プロトコル
バイナリファイル画像、音声、実行形式、計測データファイル形式の仕様
組み込み・制御レジスタ、センサー、PLC、Modbus機器のデータシート

正しく扱うためのポイント

よくある質問

1バイトの値にもエンディアンはありますか?

1バイトの中ではバイトを並べ替えられないため、通常はエンディアンの違いを考える必要はありません。2バイト以上の値で違いが現れます。

エンディアンが違うと数値そのものも変わりますか?

正しく解釈すれば数値そのものは変わりません。同じ数値を保存・送信するときのバイト配置が異なります。誤った順序で読むと別の数値として解釈されます。

ネットワークバイトオーダーはどちらですか?

TCP/IPで使われるネットワークバイトオーダーはBig Endianです。送受信時にはホスト側のバイトオーダーとの変換が必要になる場合があります。

文字列にもエンディアンは関係しますか?

ASCIIやUTF-8のようなバイト列を単純に逆順にする話ではありません。ただしUTF-16やUTF-32など、複数バイトのコード単位を使う文字エンコーディングにはバイト順が関係します。