richtig casten!
-
Guten tag an alle!
Also habe jetz eine Frage zum thema casten!
also ich habe ein array[0][2] und möchte dieses mit einem HexWert xor-verknüpfen!
Es funktioniert immer wenn der hex wert an erster stelle eine 0 hat!
Es funktioniert zb.: mit 0x6a
Sobald ich aber an erster stelle eine 1 habe. zb.: 0x8a füllt er mir alles mit 1 auf!
Es steht dann om ergebnis statt: zB.: aa steht ffffffaa! So nun weiß ich, dass mein array ein char typ ist und mein hexWert ein int. Und ich habe mich jetz informiert, das, falls es auf ein char aufgewertet wird die zahl neg is und alles mit 1en aufgefüllt wird.also wie kann ich nun mein array in ein int casten?
habe den code:data[0][i] = (unsigned int) (data[0][i] ^ hex);
das funktioniert allerdings nicht!
und i < 3, und bei i = 2 passiert immer der fehler weil hex = 0x83!
vl kann mir jem. helfen!
Danke im voraus!mfg rene
-
rene_ob schrieb:
also wie kann ich nun mein array in ein int casten?
Du willst nicht dein Array in ein int casten, sondern deinen char in ein unsigned int.
rene_ob schrieb:
data[0][i] = (unsigned int) (data[0][i] ^ hex);
Hier wird zuerst der innere Klammer-Ausdruck ausgewertet: data[0][i] ^ hex. Da data[0][i] ein char ist und hex ein int, wird der char zum int promoted. Das ergebnis ist ein int. Also hast du (unsigned int)(int) - du castest den int zum unsigned int.
Wie wärs, wenn du den char direkt castest, bevor du ihn verwendest?
-
Danke für die schnelle Antwort!
Also ich habe es so probiert:data[0][i] = (int) data[0][i] ^ hex;
Aber es funktioniert auch nicht!
-
Kopf->Tisch. Typ war schon richtig, nur die Stelle nicht-
-
Aso!
naja so:data[0][i] = data[0][i] ^ (int) hex;
funktionierts auch net!
mfg
-
Janjan schrieb:
Typ war schon richtig, nur die Stelle nicht-
Weißt du überhaupt was xor macht? Es macht keinen Sinn, dass hex größer ist als der zu "verschlüsselnde" Typ. Caste hex einfach nach char, das macht weniger ärger.
-
Ja ich weiß schon was xor macht nur hab ich ständig dieses problem und komme leider nicht auf eine Lösung!
Ja stimmt des wär a blödsinn!
mfg
-
data[0][i] ^= hex & 0xff; // !
-
otto8 schrieb:
data[0][i] ^= hex & 0xff; // !
Wtf? Wozu das & 0xff? Sind wir wieder im Rate-Club unterwegs?
-
Hallo!
danke für die Info aber hex ist nicht das problem!
erst nach der ^-verküpfung erhalte ich diesen wert!
Ich habe auch schon probiert, nach der ^-verknüpfung mein data mit 0xff zu verknüpfen(mit &) leider ohne erfolg!
mfg
-
data[o][i] ^= (char)hex;
-
Warum raten! mit 0xff könnte man theoretisch ja die erste 6 bytes löschen!
data[o][i] ^= (char)hex;
hab i schon probiert und funzt net!
aber trotzdem danke!
mfg
-
Dann hast DU schlichtweg einen Denkfehler.
Nochmal: Weißt du überhaupt was xor macht?
-
Ich rate auch mal:
data[0][i] = (unsigned char)data[0][i] ^ hex;
-
Ja bei der xor verknüpfung werden die bits miteinander verknüpft und bei 0^0 =0;
1^0=1; 0^1 =1 und 1^1 =0.
Stimmt doch oder?
mfg
-
Zeig uns ein [/b]kleines[b] komplettes Programm, das Deinen Fehler erzeugt.
-
Ich muss leider weg!
werds am abend reinstellen!
Is aber eigentlich a größeres programm!
mfg
-
rene_ob schrieb:
Es steht dann om ergebnis statt: zB.: aa steht ffffffaa! So nun weiß ich, dass mein array ein char typ ist und mein hexWert ein int.
Nimm unsigned char.
-
Vllt. noch das eine oder andere Wort zu deinem Titel - du brauchst nichts zu casten:
Das ffffffaa erscheint nur in der hexadezimalen Anzeige und weil es in einen char nicht reinpasst, steht dort nur aa drin.
Darum ist es auch egal, wie groß dein 'hexWert' ist, denn es wird nur das niederwertigste Byte als Ergebnis der XOR Verknüpfung in deinem char gespeichert.
Die ganzen ffffff scheinen dich zu irritieren, das ist nur die Eigenschaft, wie negative Zahlen im Zweierkomplement dargestellt werden, guckst du:char c = -1; printf ( "%x\n", c ); c = -2; printf ( "%x\n", c ); c = -3; printf ( "%x\n", c ); // usw.
-
Ok super vielen danke!
mfg