16进制数转10进制数原理:
某16进制数共n位,第n位表示为Xn。转换后的10进制数表示为Y。
Y = Xn×16^0 + Xn-1×16^1 + Xn-2×16^2 + …… + X1×16^n-1。
#include <stdio.h>
#include <math.h>
#include <string.h>
/* 任意进制数转十进制数 */
/* char *value : 其他进制数 */
/* int *result : 转换后的十进制数 */
/* int radix : 待转换的进制*/
void others2Decimal (char *value, int *result, int radix) {
int digit,i,j;
*result = 0;
for (i=strlen(value)-1,j=0; i>=0; i--,j++) {
if (value[i]>='0' && value[i]<='9')
digit = value[i]-'0';
if (value[i]>='a' && value[i]<='z')
digit = value[i]-'a'+10;
if (value[i]>='A' && value[i]<='Z')
digit = value[i]-'A'+10;
*result += digit*pow(radix,j);
}
}
int main (void) {
char *value;
int radix=16,result;
printf ("请输入16进制数:");
gets (value);
putchar ('\n');
puts ("================================================================\n");
printf ("10进制转换结果:");
others2Decimal (value,&result,radix);
printf ("%d\n",result);
putchar ('\n');
getch (); /*屏幕暂留*/
return 0;
}
运行结果