C语言-进制转换

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值