Hex Wert in Ascii bzw. Char umwandeln



  • Hallo zusammen

    ich habe folgenden String... F2 004000......... 00
    diesen String schicke ich per TCP

    nun ist aber der mittlerere teil in ASCII und die F2 vorne und die 00 hinten in HEX...dh. die müsste ich auch in ascii umwandeln... aber wie?:(



  • Was hast Du schon probiert, das nicht klappt?

    Du brauchst Hilfe?



  • strcat habe ich probiert...
    mit (char) 0xF2 gehts auch nicht



  • Wir brauchen mehr Infos was du überhaupt willst. Am besten indem du uns etwas von deinem Code zeigst. Aus "strcat habe ich probiert" werden wir nicht schlau. Was ist bei deinem Versuch heraus gekommen? Davon abgesehen ist strcat dafür da um Strings aneinander zu hängen und nicht zum konvertieren. Hast du wirklich einen String der die Zeichen 0 bis F enthält oder einen normalen String und du hast es nur als Hexadezimal dargestellt?



  • char icxfull[21];
    char i=0xF2;
    char icx[] = "004000F101F10380";
    //char icx2 = 0x00;

    strcat(icxfull,(char)0xF2);
    for(int y=0; y<20;y++){
    printf("%c\n",icx[y]);
    }

    das ist mein aktueller Versuch

    bekomme dann aber als fehlermeldung "initializing argument 2 of âchar* strcat(char*, const char*)â [-fpermissive]"



  • std::string icx = "004000F101F10380";
    icx.push_back((char)0xF2);



  • Du möchtest also "F2" an deinen String anhängen, sodass dieser danach "004000F101F10380F2" lautet? Das ginge so:

    char icxfull[21];
    char icx[] = "004000F101F10380";
    
    strcpy(icxfull, icx);   // icx nach icxfull kopieren
    strcat(icxfull, "F2");  // "F2" anhängen
    printf("%s\n", icxfull);
    

    Die Funktion strcat erwartet zwei Strings, aka char Pointer, und hängt diese zusammen. Im übrigen ist dein Code C und nicht C++ also bist du hier im falschen Forum. Die Ausgabe eines Strings mit printf geht übrigens am einfachsten mit %s. Du solltest dir am besten nochmal das Kapitel zu Strings in deinem C Buch durchlesen.



  • manni66 schrieb:

    std::string icx = "004000F101F10380";
    icx.push_back((char)0xF2);

    Vermutlich will er eher

    std::string icx = "004000F101F10380";
    icx += "F2";
    


  • @mitch_m
    Ich hoffe Du merkst deutlich, dass Du Dich klar ausdrücken musst.
    Bisher stiehlst Du fremden Menschen viel Zeit.

    Keine Codetags zu benutzen.
    Irgendwelche Fehlermeldungen mit Sonderzeichen hier reinzukopieren, ohne diese händisch zu ersetzen.
    C Code in einem C++ Sub-Forum.(*)

    Das alles motiviert niemanden hier...

    Die Lösung für Dein Problem ist aller Wahrscheinlichkeit nach sehr einfach. Aber bis dato hat noch niemand rausgefunden, was eigentlich das Problem ist.

    (*) Programmierst Du C++ oder C?



  • mitch_m schrieb:

    und die 00 hinten in HEX

    Hmmmm, das ist natürlich ziemlich schwierig.



  • vielleicht sollte man es gar nicht so kompliziert machen ...

    istringstream from_tcp( string("F2 004000......... 00 ") );
        int i1, i2, null;
        string ascii;
        if( from_tcp >> hex >> i1 >> i2 >> ascii >> null )
        {
            cout << "Juchhee alles richtig gelesen" << endl;
            cout << hex << showbase;
            cout << "i1 = " << i1 << "; i2=" << i2 << endl;
            cout << "im ASCII-Teil steht: [" << ascii << "]" << endl;
        }
    

    Ausgabe:

    Juchhee alles richtig gelesen
    i1 = 0xf2; i2=0x4000
    im ASCII-Teil steht: [.........]
    

    Das Vorgehen setzt voraus, dass im ASCII-Teil keine Leerzeichen oder Tabulatoren stehen; irgendwie muss die Leseroutine ja erkennen, dass das Ende des ASCII-Teils erreicht ist.


Anmelden zum Antworten