std::endian
来自cppreference.com
<tbody>
</tbody>
| 在标头 <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 << "大端\n";
else if constexpr (std::endian::native == std::endian::little)
std::cout << "小端\n";
else
std::cout << "混合端序\n";
}
可能的输出:
混合端序
参阅
(C++23) |
反转给定整数中的字节 (函数模板) |
endian 的 C 文档
| |