エンディアンは複数バイトのデータを並べる方法です。

勉強のきっかけになった問題

16進数 ABCD1234 をリトルエンディアンで4バイトのメモリに配置したものはどれか。ここで, 0~+3はバイトアドレスのオフセット値である。

ア. http://www.ap-siken.com/kakomon/29_haru/img/21a.gif
イ. http://www.ap-siken.com/kakomon/29_haru/img/21i.gif
ウ. http://www.ap-siken.com/kakomon/29_haru/img/21u.gif
エ. http://www.ap-siken.com/kakomon/29_haru/img/21e.gif
平成21年秋期問24 リトルエンディアンで配置したもの|応用情報技術者試験.com

エンディアンとは、メモリにデータを送る時のデータの並べ方です。

バイトオーダーとも言います。
コンピュータでデータをメモリに読み書きしたり、ディスクに読み書きするときには、1バイトを最小単位にして行います。
エンディアンでは4バイト単位で管理してメモリにデータを送ります。

エンディアンとは、複数のバイト(多バイト、マルチバイト)で構成されるデータを記録・伝送する際に、どのような順番で各バイトを記録・伝送するかを表す順序のこと。
e-words.jp

トルエンディアンは、4バイトにデータを後ろから順に格納していく方法です。

例えば・・・ 16進数 : ABCD1234(10101011 11001101 00010010 00110100) をトルエンディアンで4バイトに格納すると

  • 1バイト目 : 34(00110100)
  • 2バイト目 : 12(00010010)
  • 3バイト目 : CD(11001101)
  • 4バイト目 : AB(10101011)

となります。
※. ()内は2進数です。

https://upload.wikimedia.org/wikipedia/commons/thumb/3/3c/Little-Endian-ja.svg/280px-Little-Endian-ja.svg.png
エンディアン - Wikipedia

ビッグエンディアンは、4バイトにデータを前から順に格納していく方法です。

例えば・・・ 16進数 : ABCD1234(10101011 11001101 00010010 00110100) をビッグエンディアンで4バイトに格納すると

  • 1バイト目 : AB(10101011)
  • 2バイト目 : CD(11001101)
  • 3バイト目 : 12(00010010)
  • 4バイト目 : 34(00110100)

となります。
※. ()内は2進数です。

https://upload.wikimedia.org/wikipedia/commons/thumb/7/75/Big-Endian-ja.svg/280px-Big-Endian-ja.svg.png
エンディアン - Wikipedia

どのエンディアンが使われるかはCPUによって決まります。

f:id:ponsuke_tarou:20171009204140p:plain
Endian(エンディアン)ってなに? | 学校では教えてくれないこと | [技術コラム集]組込みの門 | ユークエスト株式会社

バイエンディアンは、トルエンディアンビッグエンディアンを切り替えられる方法だそうです。

実際にエンディアンを見てみる

任意の16進数をトルエンディアンビッグエンディアンに変換する方法

こちらのサイトでカンタンに変換してくれます。

web.save-editor.com

自分のパソコンのエンディアンを確認する方法

Linuxのodコマンドでファイルのマジックナンバーを見ることで確認できます。
OSがmacOS SierraでプロセッサがIntel Core i7(x86)のパソコンに置いた拡張子.pngのファイルを見てみます。
.pngマジックナンバーは、16進数で「89 50 4E 47」です。

$ od -t x -A x /Users/mana/Desktop/ThisIsPingFile.png | head -1
0000000          474e5089        0a1a0a0d        0d000000        52444849

「474e5089」となっていることからトルエンディアンであることがわかります。

【 od 】 バイナリ・ファイルの内容を閲覧す

  • オプション
    • -A 表示するオフセットの基数を指定する
    • -t 表示のタイプを指定する
  • 表示タイプ
    • x 16 進数

Linuxコマンド集 - 【 od 】 バイナリ・ファイルの内容を閲覧する:ITpro

【 head 】 ファイルの先頭部分を表示する

  • オプション
    • -n ファイルの先頭からN行を表示する

Linuxコマンド集 - 【 head 】 ファイルの先頭部分を表示する:ITpro

マジックナンバー (magic number)とは
ハードコーディングされた(ソースコードの中に直接埋め込まれた)何らかの意味を持つ値のこと
http://wa3.i-3-i.info/word12868.html

qiita.com

qiita.com