エンディアン盲?(LE/BE/NBO)

とっさに左右がわからなくなるのを左右盲というらしいけど、リトルエンディアン(LE)とビッグエンディアン(BE)がどちらか分からなくなることは多い。

あとネットワークバイトオーダー(NBO)ってどっち?とか。


まず、0xAB12CD34みたいな整数(16進表記)があったとして

リトルエンディアン...リトルがエンドだから、小さい桁からならべて「34 CD 12 AB」?
いや最初にくる桁から並べて「AB 12 CD 34」??

ってなってしまう。

正解は下位バイトから先に並べるので「34 CD 12 AB」。

何故こうなるのかというと、Little Endianというのが「(卵の)小さい方(little end=下位バイト)から先に割る人(-ian)」かららしい。

これが「EndianなのにEnd(末尾=最後に配置)じゃない!?」という混乱の元。

ネットワークバイトオーダーはネットワーク上におけるバイト順で、TCP/IPにおいてはBig Endian。対義語はホストバイトオーダー(各コンピュータ固有のバイト順)。

ホストバイトオーダーはx86 CPUがLittle Endian。PowerPCやMotorolaがBig Endian。

Bitcoinは整数格納(ブロックハッシュなど)がLittle Endianで、Scriptの中身とかは整数ではないのでそのままの順番。


あとは、ビット単位での並びにも順番はあるのだけれど、こちらはLittle Endian/Big Endianというとややこしいので(基本LE/BEはバイト単位)、MSB First/LSB Firstとか言うらしい。

...で、リトルエンディアンはどっちが先だっけ?(記事の最初に戻る)