エンディアン

提供: MacWiki
移動: 案内検索

エンディアン[編集]

多バイト数値データのバイナリフォーマットは、主に次の2通りに大別される。

リトルエンディアン[編集]

ビッグエンディアン[編集]

見分け方[編集]

次のプログラムを実行して、結果が 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

参考ページ


Wiki内の関連ページ[編集]