题目是:写一函数,要求把十六进制转换为十进制。
可是我这样怎么都不对,哪里错了?
#include<stdio.h>
#include<string.h>
#include<math.h>
#define N 80
void main()
{
int change(char x[],int n);
char a[N];
int b,n;
printf("输入一个十六进制数:");
scanf("%s",a);
n=strlen(a);
printf("该十六进制数有%d位.\n",n);
b=change(a,n);
printf("%s对应的十进制数为%d\n",a,b);
}
int change(char x[],int n)
{
int i;
static int y;
for(i=0;i<n;i++)
{
y=x[i]*pow(16,i);
}
return(y);
}
1 两大处有问题
x[i]是字符,例如字符'1'跟整数运算时,会隐式转换成其ASCII值 49
当x[i]是 a b c d e f 时要转换成10,11,12,13,14,15
2 修改了的代码如下:
已加修改注释
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h> //回答者加
#define N 80
void main()
{
int change(char x[], int n);
char a[N];
int b, n;
printf("输入一个十六进制数:");
scanf("%s", a);
n = strlen(a);
printf("该十六进制数有%d位.\n", n);
b = change(a, n);
printf("%s对应的十进制数为%d\n", a, b);
getchar();
getchar();
}
//回答者加
int char2int(char ch){
if (isdigit(ch))
return ch - '0';
if (isalpha(tolower(ch)))
return tolower(ch) - 'a' + 10;
}
int change(char x[], int n)
{
int i;
int y = 0;//回答者改
for (i = 0; i < n; i++)
{
//x[i]是字符,例如字符'1'跟整数运算时,会隐式转换成其ASCII值 49
y += char2int(x[i]) * pow(16.0, n - i - 1);//回答者改
}
return(y);
}
3 运行结果如下:
希望对你有帮助~
阿基本知道了!我想问一下十六进制数里面的字母一定要打大写或者一定要打小写吗?如果是小写的话 tolower对它有影响吗?
追答十六进制的数 大小写皆可
代码里的tolower()是为了实现
无论你输入字母是大写或小写 都转换成小写来计算其十进制
当然 你改为 toupper()也行
温馨提示:答案为网友推荐,仅供参考
第1个回答 2015-06-25
y=x[i]*pow(16,i).
这一句有问题。因为你输入的a,即现在的x,是一段字符串。需要先将字符串转换成数字,然后再进行运算,不然的话,系统会默认利用ascii值来进行运算,所以就出现了错误。
也可以改为y = (x[i] - 48 ) * pow(16,i).
这一句有问题。因为你输入的a,即现在的x,是一段字符串。需要先将字符串转换成数字,然后再进行运算,不然的话,系统会默认利用ascii值来进行运算,所以就出现了错误。
也可以改为y = (x[i] - 48 ) * pow(16,i).