Was ist die empfohlene Methode zum Lesen einer 64-Bit-binären kleinen Endian-Ganzzahl aus den 8 Bytes, auf die p zeigt? Auf x64 sollte ein einzelner Maschinenbefehl genügen, aber auf Big-Endian-Hardware werden Swaps benötigt. Wie macht man das sowohl optimal als auch portabel?
Carls Lösung ist gut, tragbar, aber nicht optimal. Dies wirft die Frage auf: Warum bietet C / C ++ keine bessere und standardisierte Möglichkeit, dies zu tun? Es ist kein ungewöhnliches Konstrukt.
Häufig gesehen:
%Vor%Es ist so ziemlich das einzige Spiel in der Stadt für Portabilität - es ist sonst schwer, mögliche Ausrichtungsprobleme zu vermeiden.
Diese Antwort geht von einem 8-Bit char
aus. Wenn Sie möglicherweise eine andere Größe char
s unterstützen möchten, benötigen Sie eine Präprozessordefinition, die CHAR_BIT überprüft und für jeden das Richtige tut.
Carl Norum hat recht - wenn Sie auch lesbar sein wollen, können Sie eine Schleife schreiben (der Compiler wird sie trotzdem abrollen). Dies wird auch gut mit Nicht-8-Bit char
s umgehen.
Ich habe den folgenden Code verwendet, um die Byte-Reihenfolge für jede Variable umzukehren. Ich habe es verwendet, um zwischen verschiedenen "Endianess" zu konvertieren.
%Vor%