C语言字符转数字,如何实现?

99ANYc3cd6
预计阅读时长 9 分钟
位置: 首页 C语言 正文

单个字符转数字(ASCII码转换)

如果字符是数字(如 '0''9'),可以通过减去 '0' 的ASCII码值得到对应的数字:

c语言如何把字符转换成数字
(图片来源网络,侵删)
char c = '5';
int num = c - '0';  // 结果为 5

原理:数字字符 '0''9' 的ASCII码是连续的(48~57),直接相减即可得到数值。


字符串转整数(atoi 函数)

将整个字符串(如 "123")转换为整数:

#include <stdlib.h>
#include <stdio.h>
int main() {
    char str[] = "123";
    int num = atoi(str);  // 结果为 123
    printf("%d\n", num);
    return 0;
}

注意

  • atoi 遇到非数字字符会停止转换(如 "123abc"123)。
  • 无法处理错误情况(如非数字字符串会返回0)。

更安全的字符串转整数(strtol 函数)

strtol 提供更好的错误处理和进制支持:

c语言如何把字符转换成数字
(图片来源网络,侵删)
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main() {
    char str[] = "456";
    char *endptr;
    long num = strtol(str, &endptr, 10);  // 10进制转换
    if (errno == ERANGE) {
        printf("数值超出范围!\n");
    } else if (*endptr != '\0') {
        printf("包含非数字字符!\n");
    } else {
        printf("%ld\n", num);  // 输出 456
    }
    return 0;
}

参数说明

  • str:待转换的字符串。
  • endptr:指向第一个未转换字符的指针(可用于检查非法字符)。
  • 10:表示10进制(可改为 16 表示16进制等)。

手动实现字符串转数字

如果需要自定义逻辑(如处理前导空格、符号等):

#include <stdio.h>
#include <ctype.h>  // 用于 isdigit()
int stringToNumber(const char *str) {
    int num = 0;
    int sign = 1;  // 默认正数
    int i = 0;
    // 处理符号
    if (str[i] == '-') {
        sign = -1;
        i++;
    } else if (str[i] == '+') {
        i++;
    }
    // 逐个字符转换
    while (str[i] != '\0' && isdigit(str[i])) {
        num = num * 10 + (str[i] - '0');
        i++;
    }
    return sign * num;
}
int main() {
    char str[] = "-789";
    printf("%d\n", stringToNumber(str));  // 输出 -789
    return 0;
}

十六进制字符转数字

处理 'A''F''a''f' 的十六进制字符:

char c = 'A';
int num;
if (c >= '0' && c <= '9') {
    num = c - '0';
} else if (c >= 'A' && c <= 'F') {
    num = 10 + (c - 'A');
} else if (c >= 'a' && c <= 'f') {
    num = 10 + (c - 'a');
}
// 结果为 10

场景 方法 适用情况
单个数字字符转数字 c - '0' 仅限 '0'~'9'
字符串转整数 atoi() 简单场景,无错误处理
安全字符串转整数 strtol() 需错误检查或进制支持
自定义转换逻辑 手动实现 需特殊规则(如符号、前导空格)
十六进制字符转数字 条件判断 处理 'A'~'F''a'~'f'

根据需求选择合适的方法,注意边界条件和错误处理!

c语言如何把字符转换成数字
(图片来源网络,侵删)
-- 展开阅读全文 --
头像
C语言用户标识符命名规则有哪些?
« 上一篇 03-06
dede博客模板h5如何适配移动端?
下一篇 » 03-06

相关文章

取消
微信二维码
支付宝二维码

目录[+]