「エンディアン」の版間の差分

提供: MacWiki
移動: 案内検索
(Reverted edit of 64.244.8.100, changed back to last version by たちゃな)
(Wiki内の関連ページ)
 
行57: 行57:
  
 
*[[数値計算]]
 
*[[数値計算]]
*[[ParallelComputing]]
 
  
 
[[Category:ソフトウェア|えんてぃあん]]
 
[[Category:ソフトウェア|えんてぃあん]]
 
[[Category:テクノロジー|えんてぃあん]]
 
[[Category:テクノロジー|えんてぃあん]]

2016年6月26日 (日) 23:22時点における最新版

エンディアン[編集]

多バイト数値データのバイナリフォーマットは、主に次の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内の関連ページ[編集]