現在、私は整数を1秒間に何度も六十二進法の文字列に変換する必要があるプロジェクトに取り組んでいます。この変換が完了するのが早いほど、優れています。
問題は、自分の基本変換方法を高速で信頼できるものにするのに苦労していることです。文字列を使用する場合、一般的に信頼性が高く、うまく機能しますが、速度は遅くなります。char配列を使用すると、一般的にはるかに高速になりますが、非常に面倒で信頼性も低くなります。(ヒープの破損、一致するはずの文字列の比較は負の値を返すなどを生成します。)
では、非常に大きな整数から六十二進法のキーに変換する最も速くて信頼できる方法は何でしょうか。将来的には、アプリケーションでSIMDモデルコードを利用する予定ですが、この操作は並列化可能ですか?
編集:この操作は1秒間に数百万回実行されます。操作が終了するとすぐに、ループの一部として再開されるため、実行速度が速いほど良いです。変換される整数は任意のサイズであり、128ビット整数(またはそれ以上)まで簡単に大きくすることができます。
編集:これは私が現在使用している機能です。
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';
}
アプリケーションの一部であるクラスからこれをリッピングし、コードの一部を変更して、所有するクラスが意味をなさないようにしました。