n进制转10进制
十进制数值 = Σ(原数字数位数值*原进制对应次方)
//radix进制转10进制
int transradix_10(string num,int radix){
int result=0,e=1;
for(int i=num.length()-1;i>=0;i--){
char c=tolower(num[i]);
if(c>='0'&&c<='9') result+=(c-'0')*e;
else result+=(c-'a'+10)*e;
e*=radix;
}
return result;
}
或使用库函数stoi,头文件<string>
- 第一个参数为要转换的n进制数字的字符串
- 第二个参数一般用不到,直接使用nullptr
- 第三个参数是n进制数字的进制
/*将14进制数字转化为10进制*/
string str="a01b$$";//字符串可以有不合法的部分,第一个不合法的字符到最后都不会被转换
int num=stoi(str,nullptr,14);
cout<<num<<","<<p;
10进制转n进制
将num对目标进制取余,每次将取余结果加入一个容器(可以是字符串)作为当前n进制数最高位,然后num等于num/目标进制,直到num等于0。
注意:按照以上步骤计算出的取余值在目标n进制数里面是按照从个位是高位的顺序计算出来的
//10进制转radix进制
string trans10_radix(int num,int radix){
string result="";
while(num!=0){
int current=num%radix;
num/=radix;
if(current<10) result=(char)(current-0+'0')+result;
else result=(char)(current-10+'a')+result;
}
return result;
}
测试
string num="A123";
int num_10=transradix_10(num,16);
printf("%d\n",num_10);
string num_trans=trans10_radix(num_10,16);
printf("%s\n",num_trans.c_str());
/*结果*/
41251
a123