Espacios de nombres
Variantes
Acciones

std::endian

De cppreference.com
< cpp‎ | types
 
 
 
Definido en el archivo de encabezado <bit>
enum class endian

{
    little = /*definido por la implementación*/,
    big    = /*definido por la implementación*/,
    native = /*definido por la implementación*/

};
(1) (desde C++20)

Indica la endianness (extremidad) de todos los tipos escalares:

  • Si todos los tipos escalares son little-endian, std::endian::native es igual a std::endian::little.
  • Si todos los tipos escalares son big-endian, std::endian::native es igual a std::endian::big.

También se soportan plataformas que son casos especiales:

  • Si todos los tipos escalares tienen sizeof igual a 1, la endianness no importa y los tres valores, std::endian::little, std::endian::big, y std::endian::native son iguales.
  • Si la plataforma utiliza una mezcla de endian , std::endian::native no es igual ni a std::endian::big ni a std::endian::little.

[editar] Posible implementación

enum class endian
{
#ifdef _WIN32
    little = 0,
    big    = 1,
    native = little
#else
    little = __ORDER_LITTLE_ENDIAN__,
    big    = __ORDER_BIG_ENDIAN__,
    native = __BYTE_ORDER__
#endif
};

[editar] Ejemplo

#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 << "mezcla de endian" << '\n';
    }
 
}

Posible salida:

little-endian