我用C语言定义了一个函数,利用乘权相加法用来将16进制数转化成10进制数,高手看下哪里有问题0
int hexadecimal_metrication(char hexadecimal_number[])//定义一个函数,利用乘权相加法将十六进制的数转化成十进制数
{
int len,i,metrication_number;
len=strlen(hexadecimal_number);
metrication_number=0;
for(i=len;i>0;i--)
{
if((hexadecimal_number[i]>='0')&&(hexadecimal_number[i]<='9'))//如果该字符为0到9中的一个,那么将其转化成数字,利用公式相加
metrication_number=metrication_number+((int) hexadecimal_number[i])*(int)pow(16,i-1);
else if(hexadecimal_number[i]>='a'&&hexadecimal_number[i]<='f')//如果是a到f中的一个,那么转化成对应的十进制数字,利用公式相加
{
switch(hexadecimal_number[i])
{
case 'a':
metrication_number=metrication_number+10*(int)pow(16,i-1);
break;
case 'b':
metrication_number=metrication_number+11*(int)pow(16,i-1);
break;
case 'c':
metrication_number=metrication_number+12*(int)pow(16,i-1);
break;
case 'd':
metrication_number=metrication_number+13*(int)pow(16,i-1);
break;
case 'e':
metrication_number=metrication_number+14*(int)pow(16,i-1);
break;
case 'f':
metrication_number=metrication_number+14*(int)pow(16,i-1);
break;
}
}
else//如果是A到F中的一个,那么转化成对应的十进制数字,利用公式相加
{
switch(hexadecimal_number[i])
{
case 'A':
metrication_number=metrication_number+10*(int)pow(16,i-1);
break;
case 'B':
metrication_number=metrication_number+11*(int)pow(16,i-1);
break;
case 'C':
metrication_number=metrication_number+12*(int)pow(16,i-1);
break;
case 'D':
metrication_number=metrication_number+13*(int)pow(16,i-1);
break;
case 'E':
metrication_number=metrication_number+14*(int)pow(16,i-1);
break;
case 'F':
metrication_number=metrication_number+14*(int)pow(16,i-1);
break;
}
}
}
return metrication_number;