3 Stimmen

Hexadezimal zu Hexatridezimal in C++

Ich versuche, die Basis 16 in die Basis 36 zu konvertieren. Ich nehme md5-Hashes und mache sie mit allen 0-9a-z.

Ich habe mich umgesehen und nichts Gutes gefunden. Gibt es Vorschläge für die Umwandlung von Hexadezimal in Hexatridezimal in C++? Kennen Sie irgendwelche guten Bibliotheken für diese Aufgabe?

3voto

Die grundlegende Lösung besteht darin, die 128-Bit-Zahl in eine (große) ganze Zahl umzuwandeln und anschließend Modulus- und Divisionsoperationen durch 36 durchzuführen.

Wenn es Ihnen jedoch nichts ausmacht, ein paar Bits zu verschwenden, warum konvertieren Sie dann nicht in die Basis 32, um die Sache zu vereinfachen? Dann können Sie alles mit Verschiebung und Maskierung machen.

3voto

John Dibling Punkte 96619

Ich nehme an, der knifflige Teil, mit dem Sie zu kämpfen haben, ist die Konvertierung in Rad36 und nicht das Abrufen eines ganzzahligen Werts aus einer als Zeichenfolge dargestellten Hex-Zahl. Also, hier ist eine Funktion, die eine unsigned __int64 wandelt es um in Radix 36 und gibt eine Zeichenkette mit dem konvertierten Wert zurück.

string rad36(unsigned __int64 v)
{
    string retval;
    while( v > 0 )
    {
        unsigned m = v%36;
        if( m <= 9 )
            retval.insert(0,1,'0'+m);
        else
            retval.insert(0,1,'A'+m-10);
        v /= 36;
    }
    return retval;
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X