• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    enum
    <bit>

    std::endian

    namespace std {
      enum class endian {
        little = 以下参照,
        big = 以下参照,
        native = 以下参照
      };
    }
    

    概要

    バイトの並び順 (エンディアン) を表す列挙型。

    複数バイトのスカラ型データの並び順として、実行環境には「ビッグエンディアン (big endian)」と「リトルエンディアン (little endian)」という2つの選択肢がある。ビッグエンディアンは上位ビットから下位ビットに向けて並び、リトルエンディアンは下位ビットから上位ビットに向けて並ぶ。

    エンディアンはシステムによって異なるため、システム間でエンディアンの変換が必要になる場合がある。そういったときのために、この列挙型を使用できる。

    各列挙値は、以下を意味する:

    列挙値 説明
    little リトルエンディアン
    big ビッグエンディアン
    native 実行環境のエンディアン。littlebigか、またはそのどちらでもない値を持つ

    全てのスカラ型のサイズが1である場合、バイト順に意味はないためlittlebignativeは同じ値を持つ。そうでなければ、littlebigは異なる値を持つ。

    全てのスカラ型がビッグエンディアンである場合、native == big。全てのスカラ型がリトルエンディアンである場合、native == little。そのどちらでもなければ、nativebigでもlittleでもない値となる (mixed endian、PDPエンディアン、ミドルエンディアンなどと呼ばれるエンディアン方式)。

    #include <bit>
    #include <iostream>
    
    int main()
    {
      if (std::endian::native == std::endian::little) {
        std::cout << "実行環境はリトルエンディアンを使用する" << std::endl;
      }
      else if (std::endian::native == std::endian::big) {
        std::cout << "実行環境はビッグエンディアンを使用する" << std::endl;
      }
      else {
        std::cout << "実行環境はリトルでもビッグでもないエンディアンを使用する" << std::endl;
      }
    }
    

    出力例

    実行環境はリトルエンディアンを使用する
    

    バージョン

    言語

    • C++20

    処理系

    参照