Hexwert umdrehen und zurückgeben
-
Hallo,
ich soll ein Programm schreiben, indem ein Hexwert z.B. 0xccbb3344 an eine Funktion als unsigned int übergeben wird. In der Funktion soll dann halt jedes Byte umgedreht werden, so dass in diesem Fall 0x4433bbcc zurückgibt. Das ganze soll mit Zeigern realisiert werden.Den Algorythmus zum umdrehen hab ich soweit eigentlich schon raus. Jedoch weiss ich einfach nicht, wie ich diesen unsigned int nun sozusagen byteweise ablaufe.
Ich hab schon überlegt das mit char zu machen.Kann mir da jemand helfen?
Funktion:
unsigned int umdrehen(unsigned int wert) { }
-
const char* p = ( const char* )&wert;
-
Headhunter_X schrieb:
Jedoch weiss ich einfach nicht, wie ich diesen unsigned int nun sozusagen byteweise ablaufe.
mach einfach für jedes byte: b = int_wert & 0xff; int_wertwert >>= 8;
-
Ey Fricky, er soll doch zeigern ...
char *p, *q; int i; p = (char*) &wert; q = (char*) &ziel + 3; for ( i=0; i<4; i++, p++, q--){ *q = *p; }
-
Danke für die Antworten, ich werde das jetzt mal mit euren Vorschlägen probieren.
-
Scheppertreiber schrieb:
Ey Fricky, er soll doch zeigern ...
ach, ich war mal wieder zu blind.
-
Ach was. Wir hätten ihm ja auch strrev() unterschieben können - noch lustiger
(bis auf die $00 klappt das auch ganz passabel).
-
Scheppertreiber schrieb:
Ach was. Wir hätten ihm ja auch strrev() unterschieben können - noch lustiger
ja, ganz gemein. das ist nämlich ne PHP-funktion.
-
Mein Watcom-C kann das auch.
PHP = BäHahaBä ...
-
Etwa so:
unsigned int umdrehen(unsigned int wert) { unsigned int iReturn = 0, iMaterIn = 1, iMaterOut = LONG_MAX + 1; for (int iLoop = 0; iLoop < 32; iLoop++) { if ((iMaterIn & wert) == 1) iReturn += iMaterOut; iMaterIn *= 2; iMaterOut /= 2; } return iReturn; }
-
Hast Recht, Hartmut. Da hatte ich wohl das OP nicht genau genug gelesen. Sorry.
int i, wert, neu; char *p, *q; wert = 0xccbb3344; for ( p=(char*)&wert, q=(char*)&neu, i=0; i<4; i++,p++,q++){ *q = *p ^ -1; }
(ich habe das sogar ausprobiert. Man könnte das auch noch mehr zusamenknäulen
-
[edit]
mist[/edit]