ホームページ >バックエンド開発 >C++ >C でエンディアンネスをプログラム的に検出するにはどうすればよいですか?

C でエンディアンネスをプログラム的に検出するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-29 10:41:10514ブラウズ

How Can I Programmatically Detect Endianness in C  ?

C でのエンディアンネスの検出

エンディアンネスは、バイトがメモリに格納される順序を指しますが、アーキテクチャが異なると異なる場合があります。 C では、プログラマは、基盤となるハードウェアまたはデータ構造との互換性を確保するために、実行しているシステムのエンディアンを決定する必要がある場合があります。

プログラムによってエンディアンを検出するには、特定のデータ型のバイト表現を検査する方法があります。次のコード スニペットは、このアプローチがどのように機能するかを示しています。

union Data {
    uint32_t i;
    char c[4];
};

bool is_big_endian()
{
    Data data = {0x01020304};
    return data.c[0] == 1;
}

このコードでは、最初のメンバーが符号なし 32 ビット整数 (uint32_t) で、2 番目のメンバーが 4 つの配列である共用体が定義されています。文字 (c[4])。値 0x01020304 を共用体メンバー i に割り当てる場合、整数のバイト表現は、システムのエンディアンに応じて、逆順 (リトルエンディアン) または通常の順序 (ビッグエンディアン) で c 配列要素に配置されます。

c[0] の値をチェックすることで、エンディアンネスを決定できます。c[0] に最下位バイト (より低い値) が含まれている場合、システムはリトルエンディアンです。 c[0] に最上位バイト (より高い値) が含まれている場合、システムはビッグエンディアンです。

以上がC でエンディアンネスをプログラム的に検出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。