c++进制转换

使用库函数输出

C语言输出

printf("%05o\n",35);    //按八进制格式输出,保留5位高位补零
printf("%03d\n",35);    //按十进制格式输出,保留3位高位补零
printf("%05x\n",35);    //按十六进制格式输出,保留5位高位补零

c++输出

c++输出十六进制默认为小写字符

#include <bitset>  
#include<iostream>
using namespace std;  
int main()  
{  
    cout << "35的8进制:" << std::oct << 35<< endl;  
    cout << "35的10进制" << std::dec << 35 << endl;  
    cout << "35的16进制:" << std::hex << 35 << endl;  
    cout << "35的2进制: " << bitset<8>(35) << endl;      //<8>:表示保留8位输出
    return 0;  
}  

使十六进制输出为大写
如果想要输出大写的话,先包含头文件 #include , 然后按照这个格式输出:cout<<setiosflags(ios::uppercase)<<hex<<int;即可输出大写。

#include <iostream>
#include <iomanip>
void main()
{
    int num_1 = 10;
    int num_2 = 11;
    int num_3 = 12;
    int num_4 = 13;
    cout << num_1 << endl;
    cout << setiosflags(ios::uppercase) << hex << num_2 << endl;
    cout << dec << num_3 << endl;
    cout << setiosflags(ios::uppercase) << hex << num_4 << endl;
}

自己编写函数输入输出

任意2-36进制数转化为10进制数

int Atoi(string s,int radix)    //s是给定的radix进制字符串
{
	int ans=0;
	for(int i=0;i<s.size();i++)
	{
		char t=s[i];
		if(t>='0'&&t<='9') ans=ans*radix+t-'0';
		else ans=ans*radix+t-'a'+10;
	}
		return ans;
}

将10进制数转换为任意的n进制数,结果为char型。

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

参考:https://blog.csdn.net/vir_lee/article/details/80645066

posted @ 2022-03-25 19:29  又一岁荣枯  阅读(164)  评论(0编辑  收藏  举报