现在我正在做一个项目,该项目需要每秒多次将整数转换为基数 62 字符串。这种转换完成得越快越好。
问题是我很难让自己的基本转换方法快速可靠。如果我使用字符串,它通常是可靠的并且运行良好,但速度很慢。如果我使用 char 数组,它通常会快得多,但它也非常混乱且不可靠。(它会产生堆损坏,应该匹配的字符串比较返回负数等)
那么从一个非常大的整数转换为一个 base 62 键的最快和最可靠的方法是什么?将来,我计划在我的应用程序中使用 SIMD 模型代码,那么这个操作是否可以并行化?
编辑:此操作每秒执行数百万次;一旦操作完成,它就会作为循环的一部分重新开始,所以它运行得越快越好。被转换的整数是任意大小的,并且可以很容易地与 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';
}
我从属于我的应用程序的一个类中删除了它,并且修改了一些代码,使其在没有其所属类的情况下有意义。