Notice : 内容無保証。禁無断転載。リンク自由。

ソース1 エンディアンの判定

(1) : キャスト時にポインタ値を自動補正するタイプのコンパイラ(具体例不明)では誤動作するらしいバージョン。

static int One_ = 1 ;

int isLittleEndian(void) {return  (int)(*(char*)&One_) ;}
int    isBigEndian(void) {return !(int)(*(char*)&One_) ;}

(2) : 判定失敗がわかる(かもしれない)バージョン。isUnknownEndian() が 真になる環境はあるのでしょうか?

static const union {
    int     i ;
    char    c[sizeof(int)] ;
} One = {
    1
} ;

int  isLittleEndian(void) {return One.c[sizeof(int)-1]==0 ;}
int     isBigEndian(void) {return One.c[0]==0 ;}
int isUnknownEndian(void) {return isLittleEndian()==isBigEndian();}

[ <前 ][ 目次 ][ 次> ]
トップページに戻る