我在atoi()中遇到过这一行并且无法理解它的作用

时间:2013-02-13 05:52:03

标签: c atoi

我有以下代码。

while (*str != '\0')
{
  digit = *str - '0';
  result = result * radix + digit;
  str++;
}

*str -'0'在这里意味着什么。?

4 个答案:

答案 0 :(得分:3)

它将ASCII字符'0'到'9'分别转换为整数值0到9。 (显然,如果您确定*str实际上是'0'到'9'中的一个字符,那么这只是一个好主意。)

答案 1 :(得分:1)

* str可能指向“0” - “9”中的字符值,但是,如果要使用简单的算法,* str可能无法按预期工作。如果* str指向字符'4'并且我们做'4'+ 2,则结果实际上是54,因为'4'的ASCII值是52.因此,通过从* str减去'0',我们将ASCII值转换为数字。 '4' - '0'+ 2 = 6

http://www.asciitable.com/

答案 2 :(得分:1)

通过从当前字符中减去数字*str的编码值,将字符值'0'转换为整数。整数的值将在0到9的范围内。

这是有效的,因为C保证数字0到9总是使用相邻值进行编码(即'1'的编码值保证正好'0' + 1,依此类推。)

许多人似乎认为这会以某种方式“利用”ASCII的某些事实,但这必须适用于运行C的任何平台,无论系统的本机编码如何。

答案 3 :(得分:0)

从char中减去零的ascii值,因此在数字的情况下,将返回该位置的数值。