c语言怎么样将一个十六进制转化成十进制

如题所述

i-x-1都应该改成x-i-1。楼主的意思就是乘以16的对应的位数次方呗,你仔细看看就知道应该是x-i-1
2、我们假设十位上是的数字是1,那么这个数代表了16,这时候用一个字符是无法表示的
也就是说,不能简单的用s[i]去存放原16进制的某位转换成10进制对应的数
一个简单的修改方法是,让func函数返回一个int型的数值,这个返回值就是对应的十进制数
具体代码见下

#include<stdio.h>
#include<string.h>
#include<math.h>
int func(char s[],int x);
void main()
{
char a[20];
int n;
int num;
printf("请输入一串十六进制数:");
scanf("%s",a);
n=strlen(a);
num=func(a,n);
printf("%s=%d",a,num);
}
int func(char s[],int x)
{
int i;
int num=0;
for(i=x-1;i>=0;i--)
{
if(s[i]>='0'&&s[i]<='9')
{
num+=(int)((s[i]-'0')*pow(16,x-i-1));
}
if(s[i]>='a'&&s[i]<='f'){
num+=(int)((s[i]-'a'+10)*pow(16,x-i-1));
}
if(s[i]>='A'&&s[i]<='F'){
num+=(int)((s[i]-'A'+10)*pow(16,x-i-1));
}
}
return num;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-06
方法其实很简单,我就不写程序了。举例:char a;a中的数转化为十进制。判断a中数的ASCLL码是否大于等于080、小于等于089(就是判断是否为0-9),如果是则a中的数就是该数的十六进制数,否就判断a中数的ASCLL码是否大于等于097、小于等于102(就是判断是否为a-f),是就进行相应的计算输出,否就是无效数字,跳出执行。这是一位的十六进制数,如果是多位的话可能会稍微复杂些,我困死了,不想思考了。
第2个回答  2011-03-06
16进制转化为10进制
(16进制数不能超过10位)
#include <stdio.h>
#include <string.h>
#include <math.h>
void main()
{
void GiveInstructions();
long ChangeHtoD(int n,char x[]);
int i,j,k;
long d;
char x[20];
clrscr();
GiveInstructions();
printf("Please Input an H number: ");
gets(x);
j=strlen(x)-1;
d=ChangeHtoD(j,x);
printf("\nThe result is: %ld\n",d);
printf("\n*********\nPress any key to quit.");
getchar();
}
void GiveInstructions()
{
printf("\n***********************************\n");
printf("\n\nThis programme gets an H number \nfrom user and changes it to D number.\n\n");
printf("\n\nNOTSE: The H number can not be more than 10-digit.\n\n");
printf("\n***********************************\n");
}
long ChangeHtoD(int n,char x[])
{
int i,j;
long r=0;
j=n;
for (i=0;i<=j;i++,n--)
{
if (x[i]>=48&&x[i]<=57) x[i]=x[i]-48;
if (x[i]>=65&&x[i]<=70) x[i]=x[i]-55;
if (x[i]>=97&x[i]<=102) x[i]=x[i]-87;
r=r+x[i]*pow(16,n);
}
return(r);
}
我也是在网上搜的,希望对你有帮助!
第3个回答  2011-03-08
输出的时候把你的数 后面 这样改 例如:(int)x36
第4个回答  2011-03-06
根本不需要转,在输出的时候用“%x”就可以了