任意进制数转换为十进制数。
此函数是根据一个公式作的。比如: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 ...
*/