gpt4 book ai didi

c++ - 如果我有一个固定大小的填充 ascii 数字的字符数组,我知道它指的是一个无符号整数,那么将它转换成这样的最快方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 00:40:13 24 4
gpt4 key购买 nike

假设我有一个char buf[12];,我知道它总是有一个右对齐的无符号数,左边用空格填充。因此,例如:_________329(其中 _ 代表空格)。我能想到的最快的解析方法是这样的:

while (*buf == ' ') buf++;
atoi(buf);

但我想知道是否有更快的方法,特别是 atoi,因为我们知道它是无符号的,而 atoi 不假设......

最佳答案

我假设第一个字符是为“潜在符号”保留的,并且始终是“空格”?因为否则,您将只需要 char[11] 而不是 char[12]。无论如何,固定大小允许手动循环展开:

unsigned parse(const char(&b)[12])
{
return ((((((((((b[1] & 15))
* 10 + (b[2] & 15))
* 10 + (b[3] & 15))
* 10 + (b[4] & 15))
* 10 + (b[5] & 15))
* 10 + (b[6] & 15))
* 10 + (b[7] & 15))
* 10 + (b[8] & 15))
* 10 + (b[9] & 15))
* 10 + (b[10]& 15);
}

请注意,& 15 技巧对空格和零的处理方式相同,并且适用于 ASCII(空格 = 32,零 = 48)和 EBCDIC(空格 = 48,零 = 240)。我还没有检查其他字符编码:)

这实际上会比 atoi 更快还是更慢?找出答案的唯一方法是测量。但无论如何,我可能会继续使用 atoi,因为使用标准函数总能提高可读性。

关于c++ - 如果我有一个固定大小的填充 ascii 数字的字符数组,我知道它指的是一个无符号整数,那么将它转换成这样的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11477716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com