C 语言中,有时需要将字符类型的数字(如 '1'、'2')转换为其对应的整数(如 1、2)。对于单个数字字符, 使用 '0' 减法是最简单和最高效的方式。对于字符串数字, 使用 atoi() 是一个不错的选择。

1、使用 -'0' 方式

最常见、最简单的方法,基于 ASCII 码表中字符数字的顺序。字符 '0' 对应 ASCII 值 48'1' 对应 49,以此类推。因此,通过将字符与 '0' 做减法,可以获得其对应的整数。

int main() {
    char c = '7';
    int num = c - '0';  // '7' - '0' = 7
    printf("The integer is: %d\n", num);  // 输出:The integer is: 7
    return 0;
}

2、使用 atoi() 函数(适用于多个字符)

如果有一个包含多个数字字符的字符串,可以使用 atoi() 来将整个字符串转换为整数。

#include <stdio.h>
#include <stdlib.h>

int main() {
    char c = '7';
    int num = atoi(&c);  // 注意:&c 是字符的地址
    printf("The integer is: %d\n", num);  // 输出:The integer is: 7
    return 0;
}

注意:atoi() 适用于处理字符串,而不是单个字符。如果是单个字符,直接用 '0' 减法更简洁。

3、使用 scanf() 输入转换

如果通过 scanf() 输入字符并希望转换为整数,可以通过 scanf 直接读取并转换。

#include <stdio.h>

int main() {
    char c;
    scanf("%c", &c);  // 输入字符
    int num = c - '0';  // 将字符转换为整数
    printf("The integer is: %d\n", num);  // 输出:The integer is: 7
    return 0;
}

4、其他更复杂的转换

如果需要处理其他字符(如 'a''f',对应十六进制),可以通过条件判断或直接映射来进行转换。

#include <stdio.h>

int main() {
    char c = 'a';  // 'a' 对应十六进制 10
    int num;
    if (c >= '0' && c <= '9') {
        num = c - '0';
    } else if (c >= 'a' && c <= 'f') {
        num = c - 'a' + 10;  // 'a' -> 10, 'b' -> 11, ...
    }
    printf("The integer is: %d\n", num);  // 输出:The integer is: 10
    return 0;
}