Integer in Hexadezimal umwandeln



  • Hallo,

    Ich möchte eine Integer in eine Hexadezimalzahl umwandeln.
    Allerdings nicht normal.

    Zu Verfügung steht mir ein Eingabefeld welches nur Eingaben zulässt der Form Integer.
    Nun möchte ich dort 300 eingeben, welches der Hexadezimalzahl 0x300 entsprechen soll.
    Nun weiß ich nicht wie ich diesen Wert auch als Hexadezimalzahl bekomme, da es ja momentan noch Integer 300 ist und nicht 0x300

    PS: ja ich weiß, dass 300 umgerechnet in hex 12C wäre



  • Na du nimmst deine Eingabe im Eingabefeld als String. Dann schreibst du in einen Stringstream zuerst "0x" und dann diesen String. Und dann extrahierst du die Variable:

    std::stringstream stream("0x");
    stream << deinString;
    int zahl;
    stream >> zahl;
    

    (Ungetestet)



  • Ich hab vergessen in Zeile 4 ein std::hex einzufügen, also Statt Zeile 4

    stream >> std::hex >> zahl;
    


  • Du kannst auch das 0x wegfallen lassen, also insgesamt geht es so:

    std::istringstream stream( deinString );
    stream >> std::hex >> zahl;
    


  • Manchmal denkt man einfach zu viel .....
    Ich war gerade dabei wild umzurechnen.
    Vielen Dank dafür, dass du mir diesen wirklich einfachen Weg aufgezeigt hast.



  • Bahaoth schrieb:

    Nun weiß ich nicht wie ich diesen Wert auch als Hexadezimalzahl bekomme, da es ja momentan noch Integer 300 ist und nicht 0x300

    Schreib eine Funktion die nen Integer in einzelne dezimale Ziffern zerlegt.
    Schreib eine zweite Funktion die nen Integer aus einzelnen hexadezimalen Ziffern zusammenbaut.
    Dann bastel dir aus den beiden Funktionen eine dritte die beides auf einmal macht.

    Hier einen Stringstream zu verwenden ist OK so lange man einfach nur irgend eine Lösung braucht, es nicht auf Geschwindigkeit etc. ankommt und man dabei nix lernen will.

    Sollte das auf deine Situation zutreffen, dann OK. Anderenfalls würde ich dir nahelegen eine Funktion die das "direkt" macht selbst zu implementieren. So schwer ist das nicht. "Wild" ist es auch nicht - je nach Formatierungsstil sind das vielleicht 10-20 Zeilen.
    Und garantiert um Grössenordnungen schneller als die Stringstream Variante.



  • Schreib eine Funktion die nen Integer in einzelne dezimale Ziffern zerlegt.

    Aber er hat doch einen String...
    Er könnte auch das hier benutzen 🤡 🤡 :

    template<typename RvalT, typename Iter>
    RvalT getHex(Iter first, Iter last)
    {
        RvalT rval = 0;
    
        for(RvalT base_mul = 1 ; last != first ; base_mul *= 16)
            rval += base_mul * (*--last - '0');
    
        return rval;
    }
    

    Ohne Alle Hexadezimalziffern A-F bzw. a-f, weil seine Eingabe es sowieso nicht erlaubt.

    @TE, Übergabe so:

    int alsHex = getHex<int>(deinString.begin(), deinString.end());
    

    Test (Ideone): http://ideone.com/dcdtPb


Log in to reply