名稱空間
變體
操作

std::endian

來自 cppreference.com
< cpp‎ | 型別
 
 
 
位操作
(C++20)
(C++23)
2 的整數次冪
(C++20)
(C++20)
(C++20)
旋轉
(C++20)
(C++20)
計數
(C++20)
(C++20)
(C++20)
位元組序
endian
(C++20)
 
定義於標頭檔案 <bit>
enum class endian

{
    little = /* implementation-defined */,
   >     big = /* implementation-defined */,
    native = /* implementation-defined */,

};
(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
};

[編輯] 備註

特性測試 標準 特性
__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