sunday-labの日本語訳版です。英語版のXOOPS Cube関連記事を翻訳作業中...

2008年1月24日木曜日

Is little endian or big endian?

ターゲットマシンがリトルエンディアンか、ビッグエンディアンかを自動でチェックする面白いコードを見かけました。


bool isLittle()
{
unsigned int val = 1;
return *((unsigned char *)&val);
}


もしマシンがリトルエンディアンなら、 val はLSBから順にメモリに格納されます。そのアドレスの値を読み取る事でリトルエンディアンかどうかを判定するという方法で、仕事で使うには少し薄気味悪いですが、フリーのライブラリに含めておくにはぴったりのコードだと感じられました。というか実際にフリーのライブラリで見かけたんですが。 (^^;

導入者に設定を返させたり、定数をあれこれさせるよりすっきりしていると思います。

2 件のコメント:

匿名 さんのコメント...

このコード正しく動作します?
16bitマシンなら正常に動作しそうな気もしますが、32bitや64bitマシンでは正しくない結果が返りそうな・・

匿名 さんのコメント...

失礼しました。
ちゃんと動きそうですね。