kagamihogeの日記

kagamihogeの日記です。

エンディアンを知る

リトルエンディアンエンディアンの話は知っていたが、やはり知識として知っているだけでは失敗するのだなぁと思いました。

失敗コードの概要

C言語でバイナリ読み込みを行うコードを考える。

用意されているバイナリデータはこんな感じ。

f2 a5 ea 67

で、バイナリデータを読んでくる。こういうコードと

unsigned long buf;
size = read(file_descriptor, &buf, 4);
printf("%lx\n", buf);

unsigned char buf[4];
size = read(file_descriptor, buf, 4);
printf("%ld\n%x %x %x %x\n", buf, buf[0], buf[1], buf[2], buf[3]);

すると出力はこうなる。

変数の型 出力値
long 67 ea a5 f2
char[4] f2 a5 ea 67

なんでこんな結果になるのか、最初サッパリわからなかった。

原因

原因は俺の無知から来るもので、x86アーキテクチャはリトルエンディアンモードで動作するため。とほほー。
こんなんでしばらく悩んでしまうとは・・・恥かしい限りです。