帮我用C语言写段代码,实现16进制转换为10进制
时间: 2024-05-11 13:14:06 浏览: 101
以下是C语言代码实现16进制转换为10进制:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
char hex[10];
int dec = 0, len, base = 1, i;
printf("Enter a hexadecimal number: ");
scanf("%s", hex);
len = strlen(hex);
for(i = len - 1; i >= 0; i--)
{
if(hex[i] >= '0' && hex[i] <= '9')
{
dec += (hex[i] - 48) * base;
base *= 16;
}
else if(hex[i] >= 'A' && hex[i] <= 'F')
{
dec += (hex[i] - 55) * base;
base *= 16;
}
else if(hex[i] >= 'a' && hex[i] <= 'f')
{
dec += (hex[i] - 87) * base;
base *= 16;
}
}
printf("The decimal equivalent of %s is %d", hex, dec);
return 0;
}
```
代码说明:
1. 定义一个字符数组 `hex` 来存储输入的16进制数;
2. 定义一个整数变量 `dec` 来存储转换后的10进制数,初始化为0;
3. 定义一个整数变量 `len` 来存储输入的16进制数的长度;
4. 定义一个整数变量 `base` 来存储当前位数的权值,初始化为1;
5. 使用 `scanf()` 函数从标准输入中读取一个16进制数,并存储在 `hex` 数组中;
6. 计算 `hex` 数组中每个字符对应的10进制值,并累加到 `dec` 变量中;
7. 遍历 `hex` 数组时,从后往前依次处理每一位16进制数,根据字符的ASCII码值判断该字符表示的16进制数的值;
8. 处理完所有位数后,将 `dec` 变量的值输出给用户,即为转换后的10进制数。
注意事项:
1. 如果输入的16进制数中包含字母,则需要根据字母的大小写和ASCII码值的差值来计算对应的10进制值;
2. 如果输入的16进制数中包含非法字符,则无法进行转换,程序会输出错误的结果;
3. 在计算16进制数的值时,需要注意每一位的权值,即16的幂次方。
阅读全文