oo0 Hex Umwandlung von Chars 0oo
-
Tach,
und zwar habeich folgende alte Klausurlösung gefunden, verstehe diese aber nicht ganz - in der Aufgabe soll der Hex Wert eines Zeichens ermittelt werden.
Die Lösung sieht wie folgt aus:char hexchar[17] = "0123456789ABCDEF"; void toHexChars(char c, char *ziel) { ziel[0] = hexchar[c > 4]; ziel[1] = hexchar[c & 0xF]; ziel[2] = 0; // Brems-Null } void main() { char c = 'a', buf[80]; toHexChars(c, buf); printf("\nCode von %c = $%s\n", c, buf); }
Ich verstehe leider nicht wie die Werte aus dem hexchar[] in der toHexChar Funktion in ziel[] gespeichert werden. Was macht "c>4" und "c&0xF" ????
Bitte hilf mir jemand uaf die Sprünge.Grüße
kalle
-
c>>4 ergibt die oberen 4 bits und c&0x0f die unteren 4. weil bei einer hexzahl jede ziffer 4 bits darstellt, passt das. übrigens solltest du 'c' besser unsigned machen, sonst könnte 'c>>4' für böse überrachungen sorgen.
-
aha - also ganz klar ist mir die sache noch nicht.
bitte verzeiht meine unwissenheit.
ich verstehe nicht ganz wieso jetzt c in einen Hex wert umgewandelt wird?
was passiert hier: hexchar[c > 4] die varibale c also die unteren 4bytes der variable c richtig? und wie wird dadurch dann die 1 in diesem fall aus dem hexchar array geholt?
-
kallemalle schrieb:
was passiert hier: hexchar[c > 4] die varibale c also die unteren 4bytes der variable c richtig?
Bits! nicht bytes. und die variable c wird selbst nicht geändert.
und wie wird dadurch dann die 1 in diesem fall aus dem hexchar array geholt?
einfache antwort:
c>>4 ist ein Ausdruck der selbst einen zahlenwert zurückgibt der den Wert der ersten 4 Bits von c enthält. 4 Bits können Werte im Bereich von 0(binär 0000) oder 15(binär 1111) erzeugen. Wenn wir also die ersten 4 bits extrahieren kriegen wir eine zahl für einen arrayindex zwischen 0 und 15.
anders geschrieben hast du dann sowas
int index=c >> 4; ziel[0] = hexchar[index];
nun ist es ja klar. dein hexarray hat 16 elemente(also indizes von 0-15) und jedem index ist ein zeichen zugeordnet.
bei den anderen 4 Bits läufts ähnlich
-
aha - also ganz klar ist mir die sache noch nicht.
bitte verzeiht meine unwissenheit.
ich verstehe nicht ganz wieso jetzt c in einen Hex wert umgewandelt wird?
was passiert hier: hexchar[c > 4] die varibale c also die unteren 4bytes der variable c richtig? und wie wird dadurch dann die 1 in diesem fall aus dem hexchar array geholt?
-
es muss c >> 4 heißen.
Das ist ein Rechtsshift um 4 Bits.aus den Bits ABCDEFGH wird 0000ABCD.
-
kallemalle schrieb:
und wie wird dadurch dann die 1 in diesem fall aus dem hexchar array geholt?
lies mal otzes posting ganz genau durch.