任意进制数转换为十进制数。
此函数是根据一个公式作的。比如:r进制数abcd转换为十进制则为:a*r^3+b*r^2+c*r^1+d*r^0 (r^3为r进制的3次方,因为abcd是四位数,因此最高位为四减一得三,所以是三次方。最低位是零次方)
设abcd为:1234.r为2。则算术式为:
1*2^3+2*2^2+3*2^1+4*2^0=8+8+6+4=26
最低位为进制的0次方,从左到右每一位依次加1.
#include <stdio.h>
#include <string>
#include <math.h>
using namespace std;
int htod(const char* number,int base)
{
 int n=0;
 int count=0;
 int i=strlen(number);
 while(--i>=0)
 {
  int x=0;
  if(number[i]>='0'&&number[i]<='9')
   x=number[i]-'0';
  else if(number[i]>='A'&&number[i]<='F')
   x=number[i]-'A'+10;
  else if(number[i]>='a'&&number[i]<='f')
   x=number[i]-'a'+10;
  //else x=0;
  n+=x*(int)pow(base,count);
    count++;
 }
 return n;
}
int main(int argc,char* argv[])

 puts("please input one number:");
 char number[200]={0};
 scanf("%s",number);
 printf("十六进制:%d\n",htod(number,16));
 printf("八进制:%d\n",htod(number,8));
 printf("二进制:%d\n",htod(number,2));
 return 0;
}
/*
please input one number:
22
十六进制:34
八进制:18
二进制:6


Terminated with return code 0
Press any key to continue ...


*/