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.
    🙂


Anmelden zum Antworten