- bit[meta header]
- std[meta namespace]
- enum[meta id-type]
- cpp20[meta cpp]
namespace std {
enum class endian {
little = 以下参照,
big = 以下参照,
native = 以下参照
};
}バイトの並び順 (エンディアン) を表す列挙型。
複数バイトのスカラ型データの並び順として、実行環境には「ビッグエンディアン (big endian)」と「リトルエンディアン (little endian)」という2つの選択肢がある。ビッグエンディアンは上位ビットから下位ビットに向けて並び、リトルエンディアンは下位ビットから上位ビットに向けて並ぶ。
エンディアンはシステムによって異なるため、システム間でエンディアンの変換が必要になる場合がある。そういったときのために、この列挙型を使用できる。
各列挙値は、以下を意味する:
| 列挙値 | 説明 |
|---|---|
little |
リトルエンディアン |
big |
ビッグエンディアン |
native |
実行環境のエンディアン。littleかbigか、またはそのどちらでもない値を持つ |
全てのスカラ型のサイズが1である場合、バイト順に意味はないためlittle、big、nativeは同じ値を持つ。そうでなければ、littleとbigは異なる値を持つ。
全てのスカラ型がビッグエンディアンである場合、native == big。全てのスカラ型がリトルエンディアンである場合、native == little。そのどちらでもなければ、nativeはbigでも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;
}
}- std::endian::native[color ff0000]
- std::endian::little[color ff0000]
- std::endian::big[color ff0000]
実行環境はリトルエンディアンを使用する
- C++20
- Clang:
- GCC:
- Visual C++: ??
__STDC_ENDIAN_BIG__,__STDC_ENDIAN_LITTLE__,__STDC_ENDIAN_NATIVE__- C互換のエンディアン定数