Schnellste Basisumwandlungsmethode?

Im Moment arbeite ich an einem Projekt, bei dem eine Ganzzahl viele Male pro Sekunde in eine 62er-Zeichenfolge konvertiert werden muss. Je schneller diese Konvertierung abgeschlossen ist, desto besser.

Das Problem ist, dass es mir schwer fällt, meine eigenen Basiskonvertierungsmethoden schnell umzusetzenund zuverlässig. Wenn ich Zeichenfolgen verwende, ist das im Allgemeinen zuverlässig und funktioniert gut, aber es ist langsam. Wenn ich char-Arrays verwende, ist dies im Allgemeinen viel schneller, aber auch sehr unordentlich und unzuverlässig. (Es erzeugt eine Heap-Beschädigung, einen Vergleich von Zeichenfolgen, die übereinstimmen sollten, und gibt ein Negativ zurück usw.)

Was ist also die schnellste und zuverlässigste Methode, um einen sehr großen Integer-Wert in einen Basis-62-Schlüssel umzuwandeln? In Zukunft plane ich, SIMD-Modellcode in meiner Anwendung zu verwenden. Ist dieser Vorgang also überhaupt parallelisierbar?

BEARBEITEN: Dieser Vorgang wird mehrere Millionen Mal pro Sekunde ausgeführt. Sobald der Vorgang abgeschlossen ist, beginnt er erneut als Teil einer Schleife. Je schneller er ausgeführt wird, desto besser. Die zu konvertierende Ganzzahl ist von beliebiger Größe und kann leicht so groß wie eine 128-Bit-Ganzzahl (oder größer) sein.

EDIT: Dies ist die Funktion, die ich gerade benutze.

char* charset = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
int charsetLength = (int)(strlen(charset));

//maxChars is an integer specifying the maximum length of the key
char* currentKey = new char[maxChars];

void integerToKey(unsigned long long location)
{
    unsigned long long num = location;
    int i = 0;

    for(; num > 0; i++)
    {
            currentKey[i] = charset[num % (charsetLength)];
            num /= charsetLength + 1;
    }

    currentKey[i + 1] = '\0';
}

Ich habe dies aus einer Klasse herausgerissen, die Teil meiner Anwendung ist, und ein Teil des Codes wurde so geändert, dass es ohne seine eigene Klasse Sinn macht.

Antworten auf die Frage(8)

Ihre Antwort auf die Frage