【发布时间】:2010-08-16 01:26:04
【问题描述】:
这段代码如何连接字符串缓冲区中的数据? * 10 在做什么?我知道减去 '0' 就是减去 ASCII 所以变成一个整数。
char *buf; // assume that buf is assigned a value such as 01234567891234567
long key_num = 0;
someFunction(&key_num);
...
void someFunction(long *key_num) {
for (int i = 0; i < 18; i++)
*key_num = *key_num * 10 + (buf[i] - '0')
}
(从我最近正在编写的代码的记忆中复制)
【问题讨论】:
-
这不是基本的 atoi 等价物吗?当然,假设是 buf 具有从 '0' 到 '9' 的字符,并且 long 的宽度足以容纳结果(64 位平台?)。此外,此代码不会连接任何前导零。
-
@chubsdad:事实证明,在这种情况下,丢弃前导零是一种期望的副作用。我从不认为这是 atoi 的情况,但我现在明白你的意思了。