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;
}
代码说明
-
输入处理:
- 程序提示用户输入一个16进制字符串
- 使用
scanf读取输入(注意:实际应用中可能需要更健壮的输入处理)
-
转换函数
hexToDecimal:- 遍历输入字符串的每个字符
- 将字符转换为对应的数值(0-9或A-F)
- 使用公式
decimal = decimal * 16 + digit进行转换
-
错误处理:
- 检测并报告无效的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;
}
这种方法更简洁,但需要检查转换是否成功。
