【总结】C++各种进制转换函数汇总



前言


进制之间的转换有两种方法:

  1. 自定义进制转换函数:将一个n进制的数转换为m进制的数,这个过程需要一个过渡,就是先将一个n进制的数转换为10进制,再将十进制数转换为m进制的数,任意进制转换为十进制的思路就是按权展开,十进制转任意进制就是求余数,直到商数为零,然后逆向取余。

  2. 调用C++中的STL函数直接转换



一、指定格式转换输出


思路: 直接通过C/C++输出格式转换为相应进制的数。

例如:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <bitset>
using namespace std;
int main(){
	printf("%05o\n",300);    //按八进制格式输出,保留5位高位补零
	printf("%03d\n",300);    //按十进制格式输出,保留3位高位补零
	printf("%05x\n",300);    //按十六进制格式输出,保留5位高位补零
	cout<<"300的8进制:"  <<std::oct <<300<<endl;  	//按八进制格式输出
    cout<<"300的10进制:" <<std::dec <<300<<endl;  	//按十进制格式输出
    cout<<"300的16进制:" <<std::hex <<300<<endl;  	//按十六进制格式输出
    cout<<"300的2进制:"  <<bitset<8>(300)<<endl;    //<8>:表示保留8位输出
	return 0;
}

输出结果:
在这里插入图片描述



二、任意2~36进制数转化为10进制数


自定义进制转换函数:

//m是要转换成的进制,s是给定的m进制下的字符串
//结果为int型
int binary(int m, string s){ 
    int ans=0;
    for(int i=0;i<s.size();i++){
        char t=s[i];
        if(t>='0'&&t<='9') 
			ans=ans*m+t-'0';
        else 
			ans=ans*m+t-'a'+10;
    }
    return ans;
}


三、10进制数转换为任意的n进制数


1、自定义进制转换函数:

//n是待转换的十进制数,m是待转换成的进制数 
string intToA(int n,int m){
    string ans="";
    do{		 //使用do{}while()循环类型以防止输入为0的情况
        int t=n%m;
        if(t>=0&&t<=9)    
			ans+=(t+'0');
        else 
			ans+=(t+'a'-10);
        n/=m;
    }while(n);   
    reverse(ans.begin(),ans.end());
    return ans;    
}

2、_itoa() 函数:

头文件: #include <cstdlib>

作用: 将一个10进制数转换为任意的2-36进制字符串

格式: itoa(num, str, m); num是一个int型的,是要转化的10进制数,str是转化结果,m为目标进制。

代码如下:

#include<cstdio> 
#include<cstdlib> 
int main(){  
    int num = 10;  
    char str[100];  
    _itoa(num, str, 2);  //c++中一般用_itoa,用itoa也行,
    printf("%s\n", str);  
    return 0;  
}


四、使用字符串流string,stream进制转换


1、 8、10和16进制字符串转换为int型10进制

代码如下:

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(){
    string s="20";
    int a,b,c;
    stringstream ss1;
    ss1<<hex<<s;   //以16进制读入流中
    ss1>>a;        //10进制int型输出
    cout<<a<<endl;
    stringstream ss2;	
    ss2<<oct<<s;  //以8进制读入流中
	ss2>>b;		  //10进制int型输出
	cout<<b<<endl;
	stringstream ss3;
	ss3<<dec<<s;  //以10进制读入流中
	ss3>>c;		  //10进制int型输出
	cout<<c<<endl;
    return 0;
}

输出结果:
在这里插入图片描述

2、int型10进制转换为string型8、10和16进制

代码如下:

#include<cstdio>
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(){
    string s1,s2,s3;
    int a=30;			//10进制 
    stringstream ss;
    ss<<oct<<a;        //10进制转成8进制读入流中
    ss>>s1;            //以字符串输出 
    cout<<s1<<endl;    //输出:36
    ss.clear();        //不清空可能会出错。
    ss<<hex<<a;        //10进制转成16进制读入流中
    ss>>s2;            //以字符串输出 
    cout<<s2<<endl;    //输出:1e
    ss.clear();
	ss<<dec<<a;		   //10进制转成10进制读入流中
	ss>>s3;			   //以字符串输出 
	cout<<s3<<endl; 
    return 0;
}

输出结果:
在这里插入图片描述



  • 34
    点赞
  • 178
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个简单的C++函数,用于将大整数从一种进制转换为另一种进制: ```cpp #include <iostream> #include <string> #include <algorithm> #include <cmath> using namespace std; string convertBase(string num, int oldBase, int newBase) { int decimalNum = 0; int power = 1; bool isNegative = (num[0] == '-'); // Convert to decimal base for (int i = num.size() - 1; i >= isNegative ? 1 : 0; i--) { int digitValue = isdigit(num[i]) ? num[i] - '0' : num[i] - 'A' + 10; decimalNum += digitValue * power; power *= oldBase; } // Convert to new base string newNum; while (decimalNum > 0) { int remainder = decimalNum % newBase; char digitChar = (remainder < 10) ? remainder + '0' : remainder - 10 + 'A'; newNum += digitChar; decimalNum /= newBase; } if (newNum.empty()) { newNum = "0"; } if (isNegative) { newNum += '-'; } // Reverse the result and return reverse(newNum.begin(), newNum.end()); return newNum; } int main() { string num; int oldBase, newBase; cout << "Enter a number: "; cin >> num; cout << "Enter the old base: "; cin >> oldBase; cout << "Enter the new base: "; cin >> newBase; cout << num << " in base " << oldBase << " is " << convertBase(num, oldBase, newBase) << " in base " << newBase << endl; return 0; } ``` 该函数使用两个参数:要转换的数字和两个进制值(旧进制和新进制)。它首先将该数字转换为十进制,然后将其转换为新进制。在转换过程中,该函数会使用余数和商的计算来获得新进制下的每一位。最后,新数被反转并返回。 请注意,此函数仅适用于非负整数。如果输入数字为负数,则应在函数中进行适当的更改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值