Darstellung von hexadezimalen Zahlen



  • okay, so richtig kapier ich das immer noch nicht. Meinst du dass in etwa so:

    seien:
    H = 20h
    e = 21h
    l = 22h
    o = 23h

    was soll dann bei der Zeichenkette 'Hello' herauskommen?

    a) alle Werte addiert
    oder
    b) alle Werte hintereinander (20h21h22h22h23h)



  • ja, bei Hello müsste "20 21 22 22 23" in der ListBox angezeigt werden.
    hm Beispiel:

    char *p_str = "hello";

    jetzt sollte z. B. beim Aufruf: MessageBox(0, p_str,0,0);
    der String "hello" in hex darstellen, also praktisch:
    MessageBox(0,"20 21 22 22 23",0,0)

    dafür müsste jedoch der ursprüngliche hexwert in einen String konvertiert werden, also:
    "20 21 22 22 23" der hexwert von "hello" muss jetzt selber als String dargestellt werden, also 20 würde zu zwei chars(Eine zwei und eine null) in 'XX XX' oder was auch immer 🙂

    blub, ich weiss zwar wie die konvertierung genau funktioniert, aber ich kriege es nicht hin. Eine bessere Erklährung kann ich auch nicht abliefern, denn wenn man es kennt weiss man was gemeint ist 🙂



  • Also wenn ich das jetzt alles richtig verstanden habe, könntest du es vielleicht so machen, dass du dir jeden Buchstaben aus der Zeichenkette ("Hello") holst, diesen in Hex umwandelst und die Hexwerte dann Stück für Stück in ein anderes char-Array speicherst. Dieses kannst du dann in deiner ListBox ausgeben.



  • das war der ursprüngliche Plan, aber meine Versuche sind ein wenig ... fehlerhaft 😉
    Ich dachte vielleicht hat einer schon die routine erstellt und würde sie zur verfügung stellen o. es gibt eine C/C++ Funktion(die ich nicht kenne) aber das gleiche vollbringt.

    Was solls, ich kriege es schon hin 🙂



  • Also ne vorgefertigte Funktion hab ich dazu nicht, würd ich jetzt auch nicht einfach so rausgeben *hehe ;)*.

    Aber prinzipiell erklären geht ja. Wie schon vermutet, musst du jedes Zeichen deines Strings durchgehen und in Hex umwandeln, was mit sprintf() ein einfaches ist. Beispiel:

    ...
    sprintf(listbox_eintrag_string, "%Xh", p_str[i]);
    ...
    

    Wie du das mit den Leerzeichen dazwischen machst, kannst du dir selber überlegen ;).



  • #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    char *string_to_hex(char *p)
    {
        char *neu = (char *)malloc(3*strlen(p)*sizeof(char));
        char *tmp = (char *)malloc(3*sizeof(char));
    
        for(int i=0; i<strlen(p); i++) {
            sprintf(tmp,"%Xh", p[i]);
            strcat(neu,tmp);
        }
    
        return neu;
    }
    
    int main(void)
    {
        char *klartext_string = "Hello World";
        char *hex_string = string_to_hex(klartext_string);
        return 0;
    }
    

    Sieht zwer nicht schön aus, aber funktioniert. Falls jemand weiß, wie das eleganter zu lösen ist, kann er das ja mal posten.



  • danke ihr beiden, das ist genau das was ich gebraucht habe 🙂

    @DarthZiu
    ich hätte zumindest nach AJ's post die Konvertierung auch mit einer for Schleife gelöst(anders geht es wohl kaum).
    Eventuell könnte man aber 2 pointer an die Funktion übergeben und als Rückgabewert true/false zurückliefern falls es zu Fehler kommt. Das ganze natürlich hübsch mit __try/__catch eingepackt (obwohl das nicht nötig ist, aber wer weiss ...) 😛
    Als Parameter wären "source_string" und "hex_string" denkbar. Mache ich später, bin auf der Arbeit, kriege schläge für wenn die mich mit C/C++ erwischen 😃

    @AJ
    Lehrzeilen werden bei mir ohne Probleme in 20h konvertiert :p



  • tk_mad schrieb:

    Eventuell könnte man aber 2 pointer an die Funktion übergeben und als Rückgabewert true/false zurückliefern falls es zu Fehler kommt.

    Ist ja nur ein Funktionsbeispiel. 🙂



  • DarthZiu schrieb:

    tk_mad schrieb:

    Eventuell könnte man aber 2 pointer an die Funktion übergeben und als Rückgabewert true/false zurückliefern falls es zu Fehler kommt.

    Ist ja nur ein Funktionsbeispiel. 🙂

    macht nichts, alles muss bemängelt werden! :p



  • tk_mad schrieb:

    @AJ
    Lehrzeilen werden bei mir ohne Probleme in 20h konvertiert :p

    Von Leerzeilen (Lehrzeilen sind dann doch noch was anderes ;)) hab ich eigentlich nicht gesprochen. Ich dachte eher an die Leerzeichen, die du bei deinem Beispiel zwischen die Hexzahlen geschrieben hattest.


Anmelden zum Antworten