我有以下代码。
while (*str != '\0')
{
digit = *str - '0';
result = result * radix + digit;
str++;
}
这里是什么*str -'0'
意思。?
它将 ASCII 字符“0”到“9”分别转换为整数值 0 到 9。*str
(显然,如果您确定它实际上是字符 '0' 到 '9' 之一,这只是一个好主意。)
这通过从当前字符*str
中减去数字的编码值将字符值转换为整数。'0'
整数的值将在 0 到 9 的范围内。
这是可行的,因为 C 保证数字 0 到 9 总是使用相邻值进行编码(即'1'
保证 的编码值是精确'0' + 1
的,等等)。
许多人似乎认为这以某种方式“利用”了 ASCII 的某些事实,但这必须适用于任何运行 C 的平台,无论系统的本机编码如何。
*str 可能指向从 '0' 到 '9' 的字符值,但是,如果要对 *str 使用简单的算术,则可能无法按预期工作。如果 *str 指向字符 '4' 并且我们执行 '4' + 2 结果实际上是 54,因为 '4' 的 ASCII 值是 52。所以通过从 *str 中减去 '0' 我们将 ASCII 值转换为位数。'4' - '0' + 2 = 6
从 char 中减去零的 ascii 值,因此如果是数字,则将返回该位置的数值。