现在我正在开发一个需要一个整数转换为一个基数62字符串多次的项目.转换速度越快,越好.
问题是我很难得到我自己的基本转换方法来快速可靠.如果我使用字符串,它通常是可靠的,运行良好,但是速度很慢.如果我使用char数组,它通常要快得多,但它也是非常混乱,不可靠的. (它产生堆损坏,应该匹配的字符串的比较返回一个负数等)
那么什么是从一个非常大的整数转换到一个基本的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'; }
解决方法
@H_403_17@ 可能你想要的是一些版本的itoa.这是一个链接,显示各种版本的itoa与性能测试:http://www.jb.man.ac.uk/~slowe/cpp/itoa.html
一般来说,我知道有两种方法来做到这一点.一种方式来执行连续的划分,以便一次删除一位数字.另一种方法是在“块”中预先计算转换.因此,您可以预先计算一个int的块,以便大小为62 ^ 3的文本转换,然后一次执行数字3.如果您做内存布局并高效查找,则在运行时可能稍快一些,但会引发启动程序.