Namespaces
Variants

std::endian

Von de.cppreference.net
 
 
Dienstprogrammbibliothek
Sprachunterstützung
Typunterstützung (Basistypen, RTTI)
Bibliotheks-Feature-Test-Makros (C++20)
Programm-Dienstprogramme
Variadische Funktionen
Koroutinen-Unterstützung (C++20)
Vertragsunterstützung (C++26)
Drei-Wege-Vergleich
(C++20)
(C++20)(C++20)(C++20)    
(C++20)(C++20)(C++20)

Allgemeine Dienstprogramme
Relationale Operatoren (veraltet in C++20)
Ganzzahl-Vergleichsfunktionen
(C++20)(C++20)(C++20)    
(C++20)
Tausch- und Typoperationen
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
Allgemeine Vokabular-Typen
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
 
Definiert in Header <bit>
enum class endian
{
    little = /* implementation-defined */,
    big    = /* implementation-defined */,
    native = /* implementation-defined */,
};
(seit C++20)

Zeigt die Endianness aller Skalartypen an:

  • Wenn alle Skalartypen Little-Endian sind, ist std::endian::native gleich std::endian::little.
  • Wenn alle Skalartypen Big-Endian sind, ist std::endian::native gleich std::endian::big.

Plattformen mit Randfällen werden ebenfalls unterstützt:

  • Wenn alle Skalartypen sizeof gleich 1 haben, spielt die Endianness keine Rolle und alle drei Werte std::endian::little, std::endian::big und std::endian::native sind identisch.
  • Wenn die Plattform gemischte Endianness verwendet, ist std::endian::native weder gleich std::endian::big noch gleich std::endian::little.

Mögliche Implementierung

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

Hinweise

Feature-Test Makro Wert Std Feature
__cpp_lib_endian 201907L (C++20) std :: endian

Beispiel

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

Mögliche Ausgabe:

mixed-endian

Siehe auch

(C++23)
kehrt die Bytes im gegebenen ganzzahligen Wert um
(Funktions-Template)
C-Dokumentation für endian