std::endian
Определено в заголовочном файле <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::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 для endian |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/types/endian