char zu hex konvertieren



  • so weit so gut 🙂

    #include <iostream>
    using namespace std;
    string CharToHex(char ch){
        char hex[3];
        sprintf(hex,"%.02x",static_cast<int>(static_cast<unsigned char>(ch)));
        return hex;
    }
    int main(){
        string text;
        cin>>text;
        for(int i=0;i<text.size();i++){
            cout<<CharToHex(text[i])<<",";
        }
        return 0;
    }
    

    problem: der will die leerzeichen net als hexwert ausgeben... kann ich das auch noch irgenwie lösen? 🙂



  • Erstens: Du brauchst die ganzen Cast's nicht, um den char an sprintf() weitergeben zu können.

    Zweitens:

    neomic schrieb:

    problem: der will die leerzeichen net als hexwert ausgeben... kann ich das auch noch irgenwie lösen? 🙂

    istream::operator>> verwendet Leerzeichen als Endemarke für die Eingabe (und leitet sie nicht weiter). Aber du könntest stattdessen mit getline() einlesen (das liest bis zum ENTER).



  • ersetze:

    cin>>text;
    

    gegen

    getline (cin, text);
    


  • gut klappt alles perfekt mittlerweile 🙂 (thx 2 the community :D)

    nun möchte ich noch hex zahlen in buchstaben umwandeln:

    string HexToChar(int hex){
        char ch[2];
        sprintf(ch,"%c",hex);
        string ch2 = ch;
        return ch2;
    }
    

    sie wird zb mit:

    HexToChar(0x61)
    

    angesprochen und man erhält das richtige ergebnis ("a")

    ich möchte aber die hex zahl als string übergeben und als einfacher char zurückerhalten oder gibt es da vll noch bessere lösungswege?

    *greeetz* 🤡



  • Einfach die Zahl als string übergeben und dann nach in umwandeln
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488.html



  • ich versteh das noch net so...

    der buffer in sprinf muss ja char* sein aber wie geb ich den als einzelnen buchstaben wieder zurück? und wie nimmt das argument nen string an bzw die hexzahl?



  • neomic schrieb:

    string HexToChar(int hex){
        char ch[2];
        sprintf(ch,"%c",hex);
        string ch2 = ch;
        return ch2;
    }
    

    sie wird zb mit:

    HexToChar(0x61)
    

    angesprochen und man erhält das richtige ergebnis ("a")

    probier dies:

    string HexToChar (int hex)
    {
       char ch[3];
       sprintf(ch,"%02x",hex);
       return string(ch);
    }
    

    ach so, doch nicht 😞

    dann so

    string HexToChar (int hex)
    {
    	char ch2[] = {hex, 0};
    	return string(ch2);
    }
    

    😉



  • sry net, möchte aber den string übergeben (net die hexzahl 😞 )und als char zurückerhalten, weil ich net weiß wie ich die "0x" dann vor die zahlen bekomme, also hätte ich das lieber als string z.b. "FF" = "255" = "ÿ"

    also so ähnlich (wenns möglich ist):

    char HexToChar(string hex)
    


  • sowas vielleicht?

    char HexToChar (string hex)
    {
       char *p;
       return (char)strtoul(hex.c_str(), &p, 16);
    }
    

    müsste mit oder ohne '0x' am anfang gehen...



  • net schrieb:

    sowas vielleicht?

    char HexToChar (string hex)
    {
       char *p;
       return (char)strtoul(hex.c_str(), &p, 16);
    }
    

    müsste mit oder ohne '0x' am anfang gehen...

    kewl ;), wenn du mir das jetzt noch erklärst wie der zum char wird.. 😃 (ich versteh das mit dem char net)


Anmelden zum Antworten