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

履歴 編集

enum
<bit>

std::endian(C++20)

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

処理系

参照