エンディアン
提供: MacWiki
エンディアン[編集]
多バイト数値データのバイナリフォーマットは、主に次の2通りに大別される。
リトルエンディアン[編集]
- x86、AMD64
- float0 形式とも
- http://e-words.jp/w/E383AAE38388E383ABE382A8E383B3E38387E382A3E382A2E383B3.html
ビッグエンディアン[編集]
- PowerPC(PowerPC 自体はリトルエンディアンにも対応しているが、Mac OS X や Linux 上ではビッグエンディアンである)
- float1 形式とも
- http://e-words.jp/w/E38393E38383E382B0E382A8E383B3E38387E382A3E382A2E383B3.html
見分け方[編集]
次のプログラムを実行して、結果が 0x78 → リトルエンディアン、0x12 → ビッグエンディアン。
#include <stdio.h> int main(void) { unsigned char charVal; unsigned long value = 0x12345678; unsigned long *ptr = &value; charVal = *(unsigned char*)ptr; printf("0x%x\n",charVal); return 0; }
変換方法[編集]
C言語では、以下のマクロで4バイト整数のエンディアンを変換できる。
#define SWAP_ENDIAN(val) ((int) ( \ (((val) & 0x000000ff) << 24) | \ (((val) & 0x0000ff00) << 8) | \ (((val) & 0x00ff0000) >> 8) | \ (((val) & 0xff000000) >> 24) ))
メモ[編集]
次のような環境変数をセットして、ファイルの read / write 時にエンディアン変換を行ってくれるコンパイラも多い。
例) F_FMTENDIAN F_FMTFLOAT F_UFMTENDIAN
参考ページ