C Byte order umkehren - DWORD erzeugen

jkallup

Erfahrenes Mitglied
Hallo,

ich habe eine binär Datei.
Da steht z.B. 0x18 0x00 0x00 0x00

wie kann ich nun dadraus ein DWORD machen.
AMD Computers (32 Bit) lesen ja 0x00 0x00 0x00 0x18

Danke für Hilfe
 
Hi

Um ein DWORD d umzudrehen:
C:
d = ((d>>24)&0x000000ff) | ((d<<24)&0xff000000) | ((d<<8)&0x00ff0000) | ((d>>8)&0x0000ff00);
Schönes C :)

Erklärung zur Vorgehensweise, falls interessiert:
Code:
aabb3344 //Hex-Zahl zum umdrehen

//Die >> sind "x mal durch 2 dividieren zB. 24 mal /2/2/2...", die << sind multiplizieren
//Nennt sich Shiften
//Bei Binär-/Hexadezimalzahlen ist das gleichbedeutend mit "Verschieben", so:
00aabb33 //>>8
000000aa //>>24
bb334400 //<<8
44000000 //<<24

//Jetzt hat man eine Zahl, wo Byte 1 auf Byte 4 geschoben wurde,
//eine, wo Byte 2 jetzt an Stelle drei ist, und beides auch noch umgekehrt.

//Mit &0x00ff0000 etc. werden jetzt die noch vorhandenen anderen Ziffern weggeschnitten
0000bb00
000000aa
00330000
44000000

//und wenn man die Nicht-Nuller noch zusammensteckt...binäres Oder:
4433bbaa
//Fertig gedreht

Das Ganze könnte man auch mit "normalen" Divisionen, Multiplikationen und Additionen lösen.
So ists aber a) wahrscheinlich schneller und b) lustiger :D

Die ganze Dreherei nennt sich übrigens Big- und Little-Endian.
Big-Endian ist die Menschenart, links Milliarden etc. und rechts die Einerstelle
(1 -> 00 00 00 01), Little dann eben byteweise gedreht (1 -> 01 00 00 00)

Und Intel Computers machen das auch so :)
Ist nicht die "Schuld" von AMD.
 

Neue Beiträge

Zurück