Binäre Ganzzahlen lesen

8
%Vor%

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.

    
XTF 21.02.2013, 17:47
quelle

3 Antworten

7

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 21.02.2013, 17:54
quelle
4

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.

%Vor%     
user529758 21.02.2013 17:56
quelle
0

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%     
Jonathan Wood 21.02.2013 18:01
quelle

Tags und Links