std::endian
De cppreference.com
<tbody>
</tbody>
| 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::nativees igual astd::endian::little. - Si todos los tipos escalares son big-endian,
std::endian::nativees igual astd::endian::big.
También se soportan plataformas que son casos especiales:
- Si todos los tipos escalares tienen
sizeofigual a 1, la endianness no importa y los tres valores,std::endian::little,std::endian::big, ystd::endian::nativeson iguales. - Si la plataforma utiliza una mezcla de endian ,
std::endian::nativeno es igual ni astd::endian::bigni astd::endian::little.
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
};
Ejemplo
Ejecuta este código
#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