ビッグエンディアンとリトルエンディアンの違い|変換方法と見分け方

この記事の要点

手元のバイト列を変換したい方へ

入力形式とバイト幅を選んで、変換結果をその場で確認できます。

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

Big EndianとLittle Endianの違い

Big Endian(ビッグエンディアン)は数値の最上位バイトを先頭に置き、Little Endian(リトルエンディアン)は最下位バイトを先頭に置きます。

32ビット値0x12345678を4バイトへ分けると12345678です。配置は次のようになります。

同じ32ビット値のバイト配置

Big Endian:12 34 56 78
Little Endian:78 56 34 12

特徴の比較

項目Big EndianLittle Endian
先頭バイト最上位バイト最下位バイト
16進数表記との見た目同じ順に見えるバイト単位で逆順に見える
代表例ネットワークバイトオーダーx86・x86-64
優劣用途と仕様次第であり、方式そのものに絶対的な優劣はない

エンディアンの変換方法

変換の基本は、16進数2桁を1バイトとして順序を反転することです。32ビット値0x12345678を例に進めます。

  1. 接頭辞0xを除き、16進数を2桁ずつ区切ります。
    12 | 34 | 56 | 78
  2. バイトの並びだけを反転します。
    78 | 56 | 34 | 12
  3. 必要な出力形式で連結します。
    78563412 または 78 56 34 12
桁ではなくバイトを反転

1234567887654321にするのは誤りです。各バイト内の12345678はそのまま保ちます。

16・32・64ビットの変換例

Big EndianLittle Endian
16ビット12 3434 12
32ビット12 34 56 7878 56 34 12
64ビット01 23 45 67 89 AB CD EFEF CD AB 89 67 45 23 01

固定長データでは先頭の00も1バイトとして扱います。たとえば32ビット値0x00000020は、Little Endianでは20 00 00 00です。先頭のゼロを省くと幅が分からなくなるため注意してください。

バイト順の見分け方

任意のバイト列だけを見ても、Big EndianかLittle Endianかを必ず判別できるとは限りません。次の情報を使って判断します。

判別例

バイト列が20 00 00 00で、仕様上のサイズが32バイトなら、32ビットLittle Endianとして読むと0x00000020=32になり、整合します。

よくある間違い

よくある質問

0x12345678をLittle Endianにするとどうなりますか?

2桁ずつ1バイトに分けて順序を反転するため、12 34 56 78は78 56 34 12になります。16進数の桁を1桁ずつ逆にするわけではありません。

エンディアン変換でビット順も反転しますか?

通常は反転しません。変えるのはバイトの順序だけで、各バイト内のビット順は保ちます。

バイト列だけでエンディアンを必ず判別できますか?

任意のバイト列だけでは必ずしも判別できません。仕様書、既知の値、マジックナンバー、妥当なサイズや範囲と照合して判断します。

符号付き整数の変換方法は違いますか?

バイト順を反転する操作は同じです。ただし変換後の値を読むときは、ビット幅を固定し、最上位ビットを使って2の補数の符号付き整数として解釈します。