Zur Compilezeit Endianess festellen?



  • Hallo, gibt der Standard einem die Möglichkeit zur Compilezeit festzustellen, mit welcher Endianess der Compiler arbeitet? (also so etwas in der richtung):

    //aus climits
    #if CHAR_BIT == 8
    
    //analog
    #ifdef LITTLE_ENDIAN
    

    Oder kann man die Endianess zur Compilezeit nicht herausfinden?



  • Keine Ahnung. Aber vielleicht reicht dir ja:

    bool littleEndian()
    {
         short s = 1;
         return (((char*)&s)[0]) == 1;
    }
    


  • 1. Warum interessiert Dich Endianness? Du kannst Dein Problem bestimmt auch lösen, ohne zu wissen, wie der Rechner Dinge im Speicher ablegt.

    2. Build-System benutzen. ZB kannst Du ein Makefile anlegen, welches zunächst ein Test-Programm kompiliert. Das Test-Programm könnte eine Header-Datei generieren. Dann wird das eigentliche Programm (mit der generierten Header-Datei) übersetzt.



  • Sebastian Pizer schrieb:

    1. Warum interessiert Dich Endianness? Du kannst Dein Problem bestimmt auch lösen, ohne zu wissen, wie der Rechner Dinge im Speicher ablegt.

    Bei plattformübergreifender Serialisierung von Massendaten ist das aber schon hilfreich. Ich fände es toll, wenn der Standard einen Header zum ermitteln der Endianess hätte. Dazu noch ein plattformunabhängiges (also klar definiertes) typeid().name() , und alles wäre fein.



  • in Boost gibts eine Header, in der Endianness bestimmt wird (boost/detail/endian.hpp)



  • Eine Frage zur Endianness hab ich noch:
    Wie ist in dem Zusammenhang der Bitshift in C++ definiert?
    Bezieht der sich immer auf den "Wert", sodass zB Bitshift links (<<) den Wert immer erhöht, oder schiebt der die Bits von rechts nach Links, egal, welche Endianness benutzt wird?


  • Mod

    Ednianess schrieb:

    Eine Frage zur Endianness hab ich noch:
    Wie ist in dem Zusammenhang der Bitshift in C++ definiert?
    Bezieht der sich immer auf den "Wert", sodass zB Bitshift links (<<) den Wert immer erhöht, oder schiebt der die Bits von rechts nach Links, egal, welche Endianness benutzt wird?

    Es wird natürlich mit den Werten gearbeitet. So lange du nicht mit Gewalt versuchst, endianess zum Problem zu machen, wirst du auch niemals Probleme bekommen.


Anmelden zum Antworten