/*
分析:
我觉得这个最重要的是理解转为十进制的那个循环公式,怎么乘以相应的16的次数,其他的都好办
*/
#include<stdio.h>
#include<string.h>
int htoi(char *s);
int main()
{
char s[10];
printf("请输入一个十六进制字符串:");
gets(s);
printf("十进制数为->%d\n",htoi(s));
return 0;
}
int htoi(char *s)
{
int n=strlen(s);
int i,sum,d;
i=sum=d=0;
int state=1;
if(s[i]=='0')
i++;
if(s[i]=='x'||s[i]=='X')
i++;
for(;state==1;i++)
{
if(s[i]>='0'&&s[i]<='9')
d=s[i]-'0';
else if(s[i]>='a'&&s[i]<='f')
d=s[i]-'a'+10;
else if(s[i]>='A'&&s[i]<='F')
d=s[i]-'A'+10;
else
state=0;
if(state==1)
sum=sum*16+d; /*主要是这个式子,不妨自己手写一下,比如输入了0x1fe9,
第一次循环:0*16+1
第二次循环:1*16+15
第三次循环:(1*16+15)*16+14-》1*16*16+15*16+14
第四次循环:(1*16*16+15*16+14)*16+9-》1*16^3+15*16^2+14*16^1+9*16^0 而这个式子其实就是我们的十六进制转化为十进制的式子
*/
}
return sum;
}