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;
}
}
16
#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
処理系
- Clang:
- GCC:
- Visual C++: ??