如何将unsigned char*快速转换为整数

how to convert unsigned char* to integer fast,

本文关键字:转换 整数 unsigned char      更新时间:2023-10-16

在我的项目中,我写了这样的转换函数:

    // len should be > 0
uint32_t stringToInt(unsigned char const* buffer, int len) {
    uint32_t result = buffer[0] - '0';
    for (int i = 1; i < len; i++) {
        result *= 10;
        result += buffer[i] - '0';
    }
    return result;
}

是否有任何stl/boost方法可以以相同的速度做同样的事情?如果不是,那么你可以进一步改进我的版本?

我不能使用atoi,因为它不允许提供len。我也不想为atoi调用创建临时缓冲区。

来自C语言的一个oi实现,对长度进行了轻微修改。

int my_atoi(char *p,int len) {
 int k = 0;
 for (int i=0;i<len;i++) {
 k = (k<<3)+(k<<1)+(*p)-'0';
 p++;
 }
 return k;
}

如果您想要最快的atoi实现,一种方法是检查gcc源代码中atoi的实现,并修改它以满足您对长度的额外要求…

一年前就看过了。它可能更慢,但更有趣:

int stringToInt(char *buffer, int len) {
    if (len > 0) {
        return myStoi(buffer + len - 1, len);
    }
    return 0;
}
int myStoi(char *curr, int len) {
    if (--len) {
        return myStoi(curr-1, len) * 10 + (*curr - '0');
    }
    return (*curr - '0');
}

这个和原来的一样,假设缓冲区内容是有效的数字字符。(即没有前导空格或破折号或加号,没有内部点或alpha字符)