命名空间
变体
操作

std::endian

来自 cppreference.com
< cpp‎ | types
在头文件 <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::littlestd::endian::bigstd::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
};

[编辑] 备注

特性测试 Std 特性
__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)
反转给定整数的值中的字节
(函数模板) [编辑]