2

重複の可能性:
C ++プログラムでプログラム的にエンディアンを検出する
Cマクロ定義を使用して、ビッグエンディアンまたはリトルエンディアンのマシンを判別しますか?

現在、システムのエンディアンを検出するために次の関数があります。

inline bool detectSystemEndianness()
{
    int i = 1;
    char *c = reinterpret_cast<char*>(&i);
    return (c[0] != i);
}

falseリトルエンディアンのtrue場合、ビッグエンディアンの場合に戻ります。最初の質問:この関数は大丈夫ですか?

2番目の質問:この関数の代わりに、静的変数を初期化したいと思います:

static bool _systemEndianness = /* SOMETHING */

どうやってするか ?(コンパイル時ではなく実行時に実行する必要があります...少なくとも私はそう思います)

4

1 に答える 1

0

2つの方法

1)さまざまなプラットフォーム用に定義したプリプロセッサを用意して、実行時ではなくコンパイル時にさまざまなエンディアンに対応できるようにします(すべてのプラットフォームを知らなくても、実装は大幅に高速ですが、実装が困難です)

2)あなたの機能に似ています:

inline bool isLittleEndian()
{
    static const int i = 1;
    static const char* const c = reinterpret_cast<const char* const>(&i);
    return (*c == 1);
}
...
static const bool _systemEndianness = isLittleEndian ();
于 2012-09-25T21:46:22.910 に答える