如何将unsigned char*快速转换为整数
how to convert unsigned char* to integer fast,
在我的项目中,我写了这样的转换函数:
// 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字符)
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在C++中将整数转换为其数字数组
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何使用C++将字符串中的字符转换为整数变量
- 如何将整数字符串转换为整数的二维向量?
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 如何检测 std::vector::emplace_back 上的隐式转换损失整数精度
- 如何防止双精度值到整数的隐式转换
- 为什么此指针值不能转换为整数的规则是什么?
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 将字符串(可以是十进制字符串或十六进制字符串)转换为整数C++
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 如何使用 STL 算法将整数向量转换为字符串向量?
- 无法将"整数 (*)[m]"转换为"整数 (*)[100000]
- 静态强制转换允许转换对象指针,但不允许转换整数