16进制转换为10进制 c语言

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

C语言实现16进制转10进制

以下是一个用C语言实现将16进制字符串转换为10进制整数的完整程序:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
// 函数声明
int hexToDecimal(const char *hexStr);
int main() {
    char hexStr[100];
    printf("请输入一个16进制数: ");
    scanf("%s", hexStr);
    int decimal = hexToDecimal(hexStr);
    printf("10进制结果为: %d\n", decimal);
    return 0;
}
// 16进制转10进制函数
int hexToDecimal(const char *hexStr) {
    int decimal = 0;
    int len = strlen(hexStr);
    // 从左到右处理每个字符
    for (int i = 0; i < len; i++) {
        char c = toupper(hexStr[i]); // 统一转为大写
        int digit;
        if (c >= '0' && c <= '9') {
            digit = c - '0';
        } else if (c >= 'A' && c <= 'F') {
            digit = 10 + (c - 'A');
        } else {
            // 无效字符
            printf("错误: 无效的16进制字符 '%c'\n", c);
            return -1;
        }
        // 更新结果
        decimal = decimal * 16 + digit;
    }
    return decimal;
}

代码说明

  1. 输入处理

    • 程序提示用户输入一个16进制字符串
    • 使用scanf读取输入(注意:实际应用中可能需要更健壮的输入处理)
  2. 转换函数hexToDecimal

    • 遍历输入字符串的每个字符
    • 将字符转换为对应的数值(0-9或A-F)
    • 使用公式 decimal = decimal * 16 + digit 进行转换
  3. 错误处理

    • 检测并报告无效的16进制字符
    • 遇到无效字符时返回-1

示例运行

请输入一个16进制数: 1A
10进制结果为: 26
请输入一个16进制数: FF
10进制结果为: 255
请输入一个16进制数: 1G
错误: 无效的16进制字符 'G'
10进制结果为: -1

替代方法

C标准库也提供了strtol函数可以直接进行转换:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    char hexStr[100];
    char *endptr;
    long decimal;
    printf("请输入一个16进制数: ");
    scanf("%s", hexStr);
    decimal = strtol(hexStr, &endptr, 16);
    if (*endptr != '\0') {
        printf("错误: 包含无效的16进制字符\n");
        return 1;
    }
    printf("10进制结果为: %ld\n", decimal);
    return 0;
}

这种方法更简洁,但需要检查转换是否成功。

-- 展开阅读全文 --
头像
织梦网站百度为啥不收录
« 上一篇 01-07
织梦如何只显示有缩略图的文章?
下一篇 » 01-07

相关文章

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

目录[+]