Namespaces
Variants

std:: endian

From cppreference.net
Utilities library
定义于头文件 <bit>
enum class endian

{
little = /* 由实现定义 */ ,
big = /* 由实现定义 */ ,
native = /* 由实现定义 */ ,

} ;
(C++20 起)

指示所有 标量类型 字节序

  • 若所有标量类型均为小端序, std :: endian :: native 等于 std :: endian :: little
  • 若所有标量类型均为大端序, std :: endian :: native 等于 std :: endian :: big

极端情况平台同样获得支持:

  • 如果所有标量类型的 sizeof 都等于 1 ,则字节序无关紧要,且三个值 std :: endian :: little std :: endian :: big std :: endian :: native 均相同。
  • 若平台采用混合字节序,则 std :: endian :: native 既不等于 std :: 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)
反转给定整数值中的字节顺序
(函数模板)
C 文档 for endian