エンディアン(Endian)

エンディアン(Endian) E

エンディアン(Endian)とは、複数のバイトからなるデータをメモリやファイルにどの順番で並べて格納するかという方式のことです。「バイトオーダー」とも呼ばれ、大きくビッグエンディアンとリトルエンディアンの2種類があります。

現実世界に例えると、エンディアンは日付の書き方の違いのようなものです。「2026年7月27日」と大きい単位から書く流儀と、「27/7/2026」と小さい単位から書く流儀があるのと同じで、どちらも同じ日付を表しますが、読む側が流儀を取り違えると意味がまるで変わってしまいます。

エンディアン 図解

エンディアン(Endian)

2つの方式

「12 34 56 78」という4バイトのデータを例にすると、並び順は次のようになります。

方式 並び順 特徴
ビッグエンディアン 12 34 56 78 人が数値を読む順序と同じで直感的
リトルエンディアン 78 56 34 12 下位のバイトから先に並べる

「エンディアン」という名前は、大きい側(ビッグ)と小さい側(リトル)のどちらの端(エンド)を先に置くかという意味に由来します。

どこで使い分けられているか

対象 採用されている方式
Intel系・AMD系のCPU リトルエンディアン
ネットワーク上の通信 ビッグエンディアン(ネットワークバイトオーダー)
ARM系のCPU 切り替え可能(多くはリトルエンディアン)
Javaの内部形式 ビッグエンディアン

身近なパソコンの多くはリトルエンディアンですが、ネットワークを流れるデータはビッグエンディアンと決められています。そのため通信を行うプログラムでは、内部の並び順と通信用の並び順を変換する処理が必要になります。

なぜ問題になるのか

同じデータでも、書き込んだ機器と読み込む機器でエンディアンが異なると、まったく違う値として解釈されてしまいます。異なる機種の間でバイナリ形式のファイルをやり取りする場合や、ネットワーク越しに数値を送る場合には、どちらの方式で扱うかを事前に取り決めておく必要があります。ネットワーク通信でビッグエンディアンが標準と定められているのは、この食い違いを防ぐためです。

方式を見分ける仕組み

テキストファイルでは、先頭にBOM(バイトオーダーマーク)という数バイトの印を置き、どちらの方式で書かれたかを示す方法が使われます。画像形式のTIFFのように、ファイルの先頭でエンディアンを宣言する仕様もあります。あらかじめ方式を一方に固定してしまう形式もあり、いずれにしても「読む側が迷わないようにする」という点が共通しています。

実務で意識する場面

高水準の言語で普通にプログラムを書いている限り、エンディアンを意識する必要はほとんどありません。言語や実行環境が違いを吸収してくれるためです。バイナリファイルを直接読み書きする場合、通信プロトコルを自作する場合、組み込み機器を扱う場合に、初めて問題として現れます。文字化けや数値の異常が説明できないときは、エンディアンの取り違えを疑ってみるとよいでしょう。

あわせて知っておきたい用語

  • BOM(バイトオーダーマーク):
    ファイル先頭に置き、文字コードやバイト順を示す数バイトの印です。
  • バイナリ:
    文字として読めない、0と1で表されたデータ形式です。
  • 文字コード:
    文字と数値の対応を定めた規則。エンディアンの影響を受ける形式もあります。
  • CPU:
    計算処理を担う部品。どちらのエンディアンを使うかはCPUの設計で決まります。
  • メモリ:
    データを一時的に置く記憶装置。ここでの並び順がエンディアンの話題です。

コメント

タイトルとURLをコピーしました