エンディアン
エンディアン(endianess)
どんなものか
2バイト以上のデータをメモリ上にバイト単位で並べる際の順番
バイトオーダー(Byte Order)、バイト順序とも呼ぶ
バイト(オクテット)単位をどのように配置するか
オクテットは8bit
エンディアンとは、複数のバイト(多バイト、マルチバイト)で構成されるデータを記録・伝送する際に、どのような順番で各バイトを記録・伝送するかを表す順序のこと。 2バイト以上のデータをメモリ上に展開したり、どこかに送る際の「バイト単位で見たときのデータの並び順」のこと
1バイトのときはエンディアンの問題は起きない
エンディアンはCPUのアーキテクチャによって分かれる? SUN MICROSYSTEMS(現Oracle)のSPARCだとビッグエンディアン リトルエンディアン、ビッグエンディアンの選択ができる
最初のやつ(MSB)から並べる
MSB(Most Significant Byte)はビット列のうち、最も大きな桁を表すバイト
最上位のバイト(MSB)から下位に向けて順に記録・伝送する方式
4バイトのデータ0x12345678なら 0x12 0x34 0x56 0x78と並べる
最後のやつ(LSB)から並べる
LSB(Least Significant Byte)はビット列のうち、最も小さな桁を表すバイト
最下位のバイト(LSB)から上位に向けて順に取り扱う方式
4バイトのデータ0x12345678なら 0x78 0x56 0x34 0x12と並べる
0x12345678を4ビット単位で表現した例
code:memo
MSB LSB
(最上位バイト) (最下位バイト)
2進 0001 0010 0011 0100 0101 0110 0111 1000
10進 1 2 3 4 5 6 7 8
16進 0x1 0x2 0x3 0x4 0x5 0x6 0x7 0x8
gdbで見るときのような1バイト単位の形式だと↓のイメージ code:ビッグエンディアン
アドレス | 80 81 82 83
データ | 0x12 0x34 0x56 0x78
←メモリ空間小 メモリ空間大→
code:リトルエンディアン
アドレス | 80 81 82 83
データ | 0x78 0x56 0x34 0x12
←メモリ空間小 メモリ空間大→
TCP/IPでのエンディアン(バイトオーダー)はビッグエンディアンに統一されている 関連用語
ネットワークバイトオーダー
ネットワークを通じて複数のバイト(多バイト、マルチバイト)で構成されるデータを記録・伝送する際に、各バイトをどのような順番で記録・伝送するかを定めた順序
TCP/IPのネットワークバイトオーダーはビッグエンディアン ホストバイトオーダー
各コンピュータ内でのエンディアン
バイトスワップ
エンディアン変換のことをバイトスワップと呼ぶ
============================
なぜエンディアンというものがあるか
関連
確認用
Q. エンディアンとは
Q. 0x12345678があったときに、どこがMSB(最上位バイト)でどこがLSB(最下位バイト)か
Q. リトルエンディアン
Q. ビッグエンディアン
Q. なぜエンディアンというものがあるのか
Q. エンディアンの性質
参考
メモ