HighByte LowByte drehen
-
Hallo Leute,
Ich habe z.B.den Wert 0x2003 und möchte diesen zu 0x3002 drehen.
Könnt Ihr mir helfen und schreiben wie das geht.
Stehe gerade auf dem Schlauch.
-
Du müsstest den Wert mit Bit-Operatoren aufspalten und neu zusammensetzen (btw, wenn du auf Byte-Ebene tauschst, wird aus 0x2003 0x0320)
-
Meiner Meinung nach müsste es doch 0x0320 heißen?!
EDIT: CSToll war mir mal wieder zu schnell. :D)short int a = 0x2003; short int b = 0; // b wird 0x0320 erhalten for (int i = 0; i < static_cast<int>(sizeof(a)); i++) b += ((a >> (i*8)) & 0xFF) << ((static_cast<int>(sizeof(a)) -1 -i)*8);
Ich glaube, das müsste gehen.
-
OT: Warum wird eigentlich nach einer Editierung die Zeit in der Übersicht aktualisiert? Mir ist dann auch schon des Öfteren passiert, dass ich einige Änderungen im Thread sehr spät erst mitbekommen habe?!? Kann man dies nicht ändern?
P.S: @ souso20: Habe oben editiert, sollte klappen.
-
irgendwo in den visual studio .h-files gibbets die makros HIBYTE und LOBYTE. damit sollte es so ähnlich gehen: x = HIBYTE(x) + LOBYTE(x)<<8;
also ohne schleifen, hässliche static_casts usw.
-
Ja, aber was ist denn, wenn es nicht bloß 2 Byte sind, sonder 4?
-
Warum nicht gleich die STL bemühen?
int val=0x2003; char* bytes= reinterpret_cast<char*> &val; std::reverse(bytes,bytes+sizeof(int));
-
Paul_C. schrieb:
Ja, aber was ist denn, wenn es nicht bloß 2 Byte sind, sonder 4?
dann könnte man z.b. htonl() nehmen. das spuckt immer big endian raus, auf x86 kisten also immer ein byteverdreher
-
CStoll schrieb:
Warum nicht gleich die STL bemühen?
int val=0x2003; char* bytes= reinterpret_cast<char*> &val; std::reverse(bytes,bytes+sizeof(int));
Das mit der STL hatten wir heute doch schonmal.
@net: htonl() kenne ich nicht.
-
Paul_C. schrieb:
@net: htonl() kenne ich nicht.
guckst du: http://www.opengroup.org/onlinepubs/007908799/xns/htonl.html