Reverse Byte für 64-bit-Wert

Ich versuche zur Umkehrung der bytes bei einem 64-bit-Adress-Zeiger für einen Auftrag und haben diesen code:

char swapPtr(char x){
x = (x & 0x00000000FFFFFFFF) << 32 | (x & 0xFFFFFFFF00000000) >> 32;
x = (x & 0x0000FFFF0000FFFF) << 16 | (x & 0xFFFF0000FFFF0000) >> 16;
x = (x & 0x00FF00FF00FF00FF) << 8  | (x & 0xFF00FF00FF00FF00) >> 8;
return x;
}

Aber es ruiniert alles. Jedoch, eine ähnliche Funktion funktioniert perfekt für ein 64bit lang. Ist es etwas anderes, das getan werden muss, um für Zeiger?

Könnte die Art und Weise mache ich dem Aufruf der Funktion ein Problem sein?

Einen Zeiger:

*(char*)loc = swapPtr(*(char*)loc);

Lange:

*loc = swapLong(*loc);
char ist nicht der richtige Datentyp. Es ist (normalerweise) eine 8-bit-byte. Wenn Sie auf einer Plattform mit 64-bit chars, erwähnen Sie bitte, dass.
ja, es ist auf der x86_64-Architektur
Dann ein char ist 8 bit. Es ist nicht möglich halten Sie eine 64-bit-Wert.

InformationsquelleAutor nix | 2014-02-02

Schreibe einen Kommentar