Namespaces
Variants

std::endian

De es.cppreference.net
 
 
Biblioteca de utilidades
Soporte del lenguaje
Soporte de tipos (tipos básicos, RTTI)
Macros de prueba de características de la biblioteca (C++20)
Utilidades de programa
Funciones variádicas
Soporte de corrutinas (C++20)
Soporte de contratos (C++26)
Comparación de tres vías
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Utilidades generales
Operadores relacionales (obsoleto en C++20)
 
 
Definido en el encabezado <bit>
enum class endian
{
    little = /* implementation-defined */,
    big    = /* implementation-defined */,
    native = /* implementation-defined */,
};
(desde C++20)

Indica el orden de bytes 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 admiten plataformas con casos límite:

  • Si todos los tipos escalares tienen sizeof igual a 1, el orden de bytes no importa y los tres valores, std::endian::little, std::endian::big y std::endian::native son iguales.
  • Si la plataforma usa endian mixto, std::endian::native no es igual ni a std::endian::big ni a std::endian::little.

Implementación posible

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

Notas

Macro de prueba de características Valor Estándar Característica
__cpp_lib_endian 201907L (C++20) std :: endian

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 << "mixed-endian\n";
}

Salida posible:

mixed-endian

Véase también

(C++23)
invierte los bytes en el valor entero dado
(plantilla de función)
C documentation para endian