構造体をファイルに書き込もうとすると、そのエンディアンがメモリ内のエンディアンと異なることがわかりました。
いくつかのテストコード:
void show_hex(unsigned char *p, int n)
{
for (int i=0; i<n;i++){
printf("%02X ",p[i]);
}
}
int main()
{
FILE *fp = fopen("as","w");
struct X{
int x,y;
};
struct X *p = malloc( sizeof(struct X));
p->x = 0xFFEECCAA;
p->y = 0xFFAADD;
show_hex((unsigned char *) p, sizeof(struct X));
fwrite(p, sizeof(struct X), 1, fp);
fclose(fp);
int f = open("as2",O_WRONLY);
write(f, p, sizeof(struct X));
close(f);
return 0;
}
問題の出力: AA CC EE FF DD AA FF 00 //私はそれがリトルエンディアンであることを知っています
tyw@um08:~/pro|master⚡ ⇒ hexdump as
0000000 ccaa ffee aadd 00ff
0000008
tyw@um08:~/pro|master⚡ ⇒ hexdump as2
0000000 ccaa ffee aadd 00ff
0000008
だからエンディングが違う。