エンディアン
エンディアン(endianess)
どんなものか
2バイト以上のデータをメモリ上にバイト単位で並べる際の順番
バイトオーダー(Byte Order)、バイト順序とも呼ぶ
バイト(オクテット)単位をどのように配置するか
オクテットは8bit
エンディアンとは、複数のバイト(多バイト、マルチバイト)で構成されるデータを記録・伝送する際に、どのような順番で各バイトを記録・伝送するかを表す順序のこと。
ref: エンディアン(バイトオーダー)とは - 意味をわかりやすく - IT用語辞典 e-Words
伝送はTCP/IPなどのネットワーク通信で情報を送信する感じのこと
2バイト以上のデータをメモリ上に展開したり、どこかに送る際の「バイト単位で見たときのデータの並び順」のこと
ref: エンディアンとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
1バイトのときはエンディアンの問題は起きない
エンディアンはCPUのアーキテクチャによって分かれる
x86アーキテクチャのCPUだとリトルエンディアン
SUN MICROSYSTEMS(現Oracle)のSPARCだとビッグエンディアン
ARMアーキテクチャやPowerPCと呼ばれるものはバイ・エンディアン
リトルエンディアン、ビッグエンディアンの選択ができる
AIXの場合はデフォルトがビッグエンディアン
ビッグエンディアン(big endian)
最初のやつ(MSB)から並べる
MSB(Most Significant Byte)はビット列のうち、最も大きな桁を表すバイト
最上位のバイト(MSB)から下位に向けて順に記録・伝送する方式
4バイトのデータ0x12345678なら 0x12 0x34 0x56 0x78と並べる
リトルエンディアン(little endian)
最後のやつ(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のネットワークバイトオーダーはビッグエンディアン
ホストバイトオーダー
各コンピュータ内でのエンディアン
バイトスワップ
エンディアン変換のことをバイトスワップと呼ぶ
============================
エンディアンに強いコード
C言語でのエンディアンの変換
エンディアンの判定
なぜエンディアンというものがあるか
TODO
エンディアンの一番詳しい資料
White Paper: Endianness or Where is Byte 0? を読めば良いと思う
全部は読めていないけどビットのエンディアンや、数式による形式定義にまで踏み込んでるから多分一番詳しい
関連
アライメント
UTF-16
確認用
Q. エンディアンとは
Q. 0x12345678があったときに、どこがMSB(最上位バイト)でどこがLSB(最下位バイト)か
Q. リトルエンディアン
Q. ビッグエンディアン
Q. なぜエンディアンというものがあるのか
Q. エンディアンの性質
参考
エンディアン - Wikipedia
エンディアンとは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
『プロフェッショナルIPv6』
エンディアンについて (ビット編)
Big Endian と Little Endian の判別(Kodama's tips page)
White Paper: Endianness or Where is Byte 0?
メモ
Endian(エンディアン)ってなに? | 学校では教えてくれないこと | 【技術コラム集】組込みの門 | 東光高岳
POS39-C. システム間でデータを送受信するときは正しいバイトオーダーを使用する
#ネットワーク #CPU #バイナリ