リトルエンディアン。エンディアンの話は知っていたが、やはり知識として知っているだけでは失敗するのだなぁと思いました。
失敗コードの概要
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 |
なんでこんな結果になるのか、最初サッパリわからなかった。