Namespaces
Variants

std:: endian

From cppreference.net
Utilities library
Definiert im Header <bit>
enum class endian

{
little = /* implementationsdefiniert */ ,
big = /* implementationsdefiniert */ ,
native = /* implementationsdefiniert */ ,

} ;
(seit C++20)

Gibt die Endianness aller skalaren Typen an:

  • Wenn alle skalaren Typen Little-Endian sind, std :: endian :: native entspricht std :: endian :: little .
  • Wenn alle skalaren Typen Big-Endian sind, std :: endian :: native entspricht std :: endian :: big .

Eckenfall-Plattformen werden ebenfalls unterstützt:

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

Inhaltsverzeichnis

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