0

我有以下代码。

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

这里是什么*str -'0'意思。?

4

4 回答 4

3

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

于 2013-02-13T05:54:48.890 回答
1

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

这是可行的,因为 C 保证数字 0 到 9 总是使用相邻值进行编码(即'1'保证 的编码值是精确'0' + 1的,等等)。

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

于 2013-02-13T07:28:38.043 回答
1

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

http://www.asciitable.com/

于 2013-02-13T06:05:00.570 回答
0

从 char 中减去零的 ascii 值,因此如果是数字,则将返回该位置的数值。

于 2013-02-13T05:54:26.520 回答