c – 最快的基本转换方法?

前端之家收集整理的这篇文章主要介绍了c – 最快的基本转换方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
现在我正在开发一个需要一个整数转换为一个基数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';
}

我把这个从我应用程序的一部分中删除,并且一些代码修改,使得它是有道理的.

解决方法

可能你想要的是一些版本的itoa.这是一个链接,显示各种版本的itoa与性能测试:
http://www.jb.man.ac.uk/~slowe/cpp/itoa.html

一般来说,我知道有两种方法来做到这一点.一种方式来执行连续的划分,以便一次删除一位数字.另一种方法是在“块”中预先计算转换.因此,您可以预先计算一个int的块,以便大小为62 ^ 3的文本转换,然后一次执行数字3.如果您做内存布局并高效查找,则在运行时可能稍快一些,但会引发启动程序.

原文链接:https://www.f2er.com/c/111669.html

猜你在找的C&C++相关文章