char zu hex konvertieren



  • will ja nicht drauf rumreiten aber probier mal meinen weg der ist fehlerfrei und gibt alle zeichen wieder von 0 - 255 in Int Hex & Ascii 😉



  • Dann versuch's mal mit unsigned int. Sieht aus, als würde da was mit dem Vorzeichenbit nicht stimmen.

    LowFly: Die beiden Funktionen sind beide sehr kryptisch und plattes C. Sowas als Problemlösung zu verkaufen ist ein bißchen viel des guten. Insbesondere wenn es ein 2-Zeiler auch tut. Die erste Funktion mag ja für C noch in Ordnung sein, die zweite ist aber wirklich der letzte Hack. Sowas baut doch kein vernünftiger Mensch in seine Programme ein.



  • neomic schrieb:

    Jester schrieb:

    Dann versuch's mal mit

    int x = 'a';
    cout << hex << x;

    danke, das klappt soweit so wie ich es will 🙂

    nur bei höheren zeichen wie zum beispiel "Ö" (213) bekomm ich plöztlich 8 zeichen wo es doch eigentlich nur zwei sein sollten...

    wie löse ich dieses problem?

    Möglichkeit A: Du verwendest Unicode-Zeichen-blabla
    Möglichkeit B: Fehler - irgendwo (dümmste Antwort)
    Möglichkeit C: Das Ö im Konsolenfenster hat ein anderes Ascii... als das Ö von der TAstatur

    (bin mir aber sicher, dass dies entweder falsch odeer schon bekannt ist)

    MfG Rhombicosidodecahedron



  • #include <iostream>
    using namespace std;
    
    int main()
    {
        char ch = 10;
        //hexausgabe  char
        char hexa[] = "0123456789abcdef";
        cout << hexa[(ch&0xf0)>>4] << hexa[ch&0xf] << endl;
    
        return 0;
    }
    


  • @ jester
    hab dich forhin schonmal gefragt auf welche funktionen spielst du an, ich nutz die funktionen so wie ich sie gepostet hab und es geht alles problemlos.



  • neomic schrieb:

    habe es dann umgeschrieben als char (anstatt void) und return c, gibt aber nur die dezimalzahl aus und denn buchstaben selber (a = 61a), wo liegt der fehler?

    du kannst die beiden hexziffern in die ersten beiden zeichen eines char[3]-arrays schreiben, dessen drittes byte immer '0' ist. dann hast du einen C-string. das argument (unsigned char) muss 'unsigned' bleiben, sonst geht der shift (>>4) schief (ausser du maskierst danach mit 0x0f). die zeichenkette mit allen hexziffern brauchste auch nur einmal (z.b. als static const char*). so wie die funktion da steht, soll sie ja nur das prinzip zeigen 🙂

    Jester schrieb:

    @LowFly: Diese beiden Funktionen sind nicht wirklich ernst gemeint, oder?

    die hat heute schon mal einer gepostet. kommen bestimmt von 'nem 'obfuscated C contest' 😉



  • LowFly schrieb:

    @ jester
    hab dich forhin schonmal gefragt auf welche funktionen spielst du an, ich nutz die funktionen so wie ich sie gepostet hab und es geht alles problemlos.

    Ich meine genau die zwei Funktionen die Du gepostet hast. Ich zweifle nicht daran, daß sie funktionieren. Ich sage nur, daß sie häßlich und kryptisch sind. Daher halte sich sie für eine ernstgemeinte Antwort als Hilfe an einen Anfänger für ungeeignet. Daher fragte ich, ob Du das ernst meinst.



  • ich weiß net warum aber das klappt^^

    #include <iostream>
    using namespace std;
    
    int main()
    {
        int ch = 'Ö';
        //hexausgabe  char
        char hexa[] = "0123456789abcdef";
        cout << hexa[(ch&0xf0)>>4] << hexa[ch&0xf] << endl;
        return 0;
    }
    

    ausgabe: d6

    thx problem ist hiermit gelöst 😃



  • lol ja meine ich ernst da sie fehlerfrei funzen
    @net
    ja derjenige war ich und aus welcher foren ecke ich die gekraben hab weis garnet mehr so genau glaub von hier auf der suche nach hex o. byte



  • LowFly schrieb:

    lol ja meine ich ernst da sie fehlerfrei funzen

    Hast Du meine Postings gelesen?
    Ich sage nicht, daß sie nicht funktionieren. Ich sage nur, dass ich es nicht gut finde etwas dermaßen häßliches und kryptisches als Lösungsvorschlag an nen Anfänger zu geben.



  • LowFly deine Dummheit kotzt mich.



  • neomic schrieb:

    ich weiß net warum aber das klappt^^

    Hm, damit sollte man sich nicht zufrieden geben. Nichts gegen die Lösung von net, die ist sehr schick -- aber wenn man sie nicht versteht, sollte man vielleicht erstmal bei den von der STL vorgegebenen Funktionen bleiben, die in jedem guten Anfängerbuch zumindest minimal beschrieben werden:

    inline void put_char(unsigned char c, ostream & out = cout)
    {
        ios::fmtflags old = out.flags(ios::hex);
        out << setfill('0') << setw(2) << static_cast<int>(c);
        out.flags(old);
    }
    
    int main()
    {
        put_char('x');
        cout << endl;
    }
    

    Was hier passiert, sollte mit einer STL-Referenz nachvollziehbar sein.



  • @ jester
    ja hab ich und ich hab auch verstanden das du weist das sie fehlerfrei sind das bezog ich auch nur darauf weshalb ich es ernst meine.

    @ hexx
    was dich ankotzt is nich mein problem, da du noch nichtmal den mut hast sowas als registrierter zu posten kann ich dich nicht ernst nehmen. viel spaß beim sachen waschen. hoffe für dich du hast nichts deftiges gegessen. sonst haste probleme das zeug aus der tastatur zu kriegen 😃



  • LowFly schrieb:

    @ jester
    ja hab ich und ich hab auch verstanden das du weist das sie fehlerfrei sind das bezog ich auch nur darauf weshalb ich es ernst meine.

    okay, das läßt tief blicken.



  • char ch = 'Ö'; //hexausgabe  char
        cout << noshowbase << hex << static_cast<int>(static_cast<unsigned char>(ch)) << endl;
    


  • 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


Anmelden zum Antworten