名前空間
変種
操作

std::endian

From cppreference.com
< cpp‎ | types
 
 
ユーティリティライブラリ
言語サポート
型のサポート (基本型、RTTI)
ライブラリ機能検査マクロ (C++20)
プログラムユーティリティ
可変引数関数
コルーチンサポート (C++20)
契約サポート (C++26)
三方比較
(C++20)
(C++20)(C++20)(C++20)  
(C++20)(C++20)(C++20)

汎用ユーティリティ
関係演算子 (C++20で非推奨)
 
 
ヘッダ <bit> で定義
enum class endian

{
    little = /* 処理系定義 */,
    big    = /* 処理系定義 */,
    native = /* 処理系定義 */,

};
(C++20以降)

すべてのスカラ型エンディアンを示す

  • すべてのスカラ型がリトルエンディアンの場合、std::endian::nativestd::endian::little と等しくなります。
  • すべてのスカラ型がビッグエンディアンの場合、std::endian::nativestd::endian::big と等しくなります。

特殊なプラットフォームもサポートされます

  • すべてのスカラ型の sizeof1 に等しい場合、エンディアンは関係なく、3つの値すべて (std::endian::littlestd::endian::big、および std::endian::native) は同じになります。
  • プラットフォームが混合エンディアンを使用している場合、std::endian::nativestd::endian::big でも std::endian::little でもなく等しくありません。

目次

[編集] 可能な実装

enum class endian
{
#if defined(_MSC_VER) && !defined(__clang__)
    little = 0,
    big    = 1,
    native = little
#else
    little = __ORDER_LITTLE_ENDIAN__,
    big    = __ORDER_BIG_ENDIAN__,
    native = __BYTE_ORDER__
#endif
};

[編集] 備考

機能テストマクロ 規格 機能
__cpp_lib_endian 201907L (C++20) std::endian

[編集]

#include <bit>
#include <iostream>
 
int main()
{
    if constexpr (std::endian::native == std::endian::big)
        std::cout << "big-endian\n";
    else if constexpr (std::endian::native == std::endian::little)
        std::cout << "little-endian\n";
    else
        std::cout << "mixed-endian\n";
}

実行結果の例

mixed-endian

[編集] 関連項目

(C++23)
与えられた整数値のバイト順を反転する
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)