(Diese Frage kam aus die Details CHAR_BIT erklären, sizeof und endianness jemand gestern. Es völlig hypothetisch ist.)Wie erkenne ich Endianess auf einem System, auf dem alle primitiven Integer-Größen gleich sind?
Lasst uns sagen, dass ich auf einer Plattform bin, wo CHAR_BIT 32 ist, so sizeof (char) = = sizeof (kurz) == sizeof (int) == sizeof (lang). Ich glaube, dass dies immer noch eine standardkonforme Umgebung ist.
Der üblicher Weg endianness zur Laufzeit (because there is no reliable way to do it at compile time) zu erkennen ist, ein union { int i, char c[sizeof(int)] } x; x.i = 1
zu machen und sehen, ob x.c[0]
oder x.c[sizeof(int)-1]
eingestellt wurde.
Aber das funktioniert nicht auf dieser Plattform, da ich am Ende mit einem char [1] enden.
Gibt es eine Möglichkeit zu erkennen, ob eine solche Plattform zur Laufzeit big-endian oder little-endian ist? Offensichtlich spielt es in diesem hypothetischen System keine Rolle, aber man kann sich vorstellen, dass es in eine Datei schreibt oder in eine Art Speicherbereich, die von einer anderen Maschine entsprechend ihrem (gesünderen) Speichermodell gelesen und rekonstruiert wird.
können Sie versuchen, das 'AC_C_BIGENDIAN'-Makro von autoconf zur Kompilierzeit zu verwenden, es ist ziemlich robust und greift auf eine Test-Binärdatei zurück, wenn es den Code nicht direkt ausführen kann. – Hasturkun