将十六进制转换成十进制的函数有些不懂?

来源:百度知道 编辑:UC知道 时间:2024/06/27 07:16:25
#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;

我想你应该了解的是各种进制到10进制的计算方法:
例如:有N进制数 12345 = 5*N^0 + 4*N^1 + 3*N^2 + 2*N^3 + 1*N^4;
有了这个,在对着程序应该看得懂了

直接用这个函数就是了

你也不问问题,怎么回答?