#include <stdio.h>
#define MAX 100
main(0
{
char t[MAX];
i=0;
printf("input a hex number:");
while((c=getchar())!='\0'&&i<MAX)
{
if(c>='0'&&c<='9'||c>='a'&&c<='f'||c>='A'&&c<='F')
{
t[i++]=c;
}
else
printf("illegal char\n");
}
printf("decimal number %d:\n",htoi(t));
}
int htoi(char s[]
{
int i,n;
n=0;
for(i=0;s[i]!='\0';i++)
{
ifs[i]>='\0'&&s[i]<='9')
n=n*16+s[i]-'0'; (左边式子的原理)
ifs[i]>='a'&&s[i]<='f')
n=n*16+s[i]-'a'+10; (同上)
if(s[i]>='A'&&S[i]<='F')
n=n*16+s[i]-'A'+10; (同上)
}
return n;
參考答案:int htoi(char s[]
{
int i,n;
n=0;
for(i=0;s[i]!='\0';i++)
{
//前面的就不用说了
//ifs[i]>='\0'&&s[i]<='9')
//这句有很多错误,应该是
if((s[i]>='0')&&(s[i]<='9'))
//继续...求所有十六进制数的和
n=n*16+s[i]-'0'; (左边式子的原理)
//这句原理也很简单
//n最初为零,(s[i]-'0')是真实的数字大小,这样n最初为
//输入十六进制数的最左位,然后通过左移不停乘以16冥次方。
//假设你输入的16进制数为:450
//第一个循环结束,n=0+4;
//第二个循环结束,n=(0+4)*16+5 = 4*16+5
//第三个循环结束,n=(4*16+5)*16+0 = 4*16*16 + 5*16 + 0
//从而实现了十六进制向10进制的转换
//下面原理相同,只是对"A--F"这几个特殊字符特殊处理而已。
ifs[i]>='a'&&s[i]<='f')
n=n*16+s[i]-'a'+10; (同上)
if(s[i]>='A'&&S[i]<='F')
n=n*16+s[i]-'A'+10; (同上)
}
return n;