printf("%05o\n",35); //按八进制格式输出,保留5位高位补零
printf("%03d\n",35); //按十进制格式输出,保留3位高位补零
printf("%05x\n",35); //按十六进制格式输出,保留5位高位补零
00043
00035
2.在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;
35的8进制:43
35的10进制35
35的16进制:23
35的2进制: 00100011
二、C/C++各种进制转换库函数
一)任意2-36进制数转化为10进制数
int Atoi(string s,int 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;
1. strtol()函数
函数原型:long int strtol(const char *nptr, char **endptr, int base)
base是要转化的数的进制,非法字符会赋值给endptr,nptr是要转化的字符
#include <bitset>
#include<iostream>
using namespace std;
int main()
char buffer[20]="10549stend#12";
char *stop;
int ans=strtol(buffer,&stop,8); //将八进制1054转成十进制,后面均为非法字符
cout<<ans<<endl;
cout<<stop<<endl;
return 0;
9stend#12
①如果base为0,且字符串不是以0x(或者0X)开头,则按照十进制进行转化。
②如果base为0或者16,并且字符串以0X(或者0x)开头,则x(或者X)被忽略,字符串按16进制转化。
③如果base不等于0和16,并且字符串以0x(或者0X)开头,则x被视为非法字符。
④对于nptr指向的字符串,其开头和结尾的空格被忽略,字符串中间的空格被视为非法字符。
二)将10进制数转换为任意的n进制数,结果为字符串类型
注意:std::reverse() 被定义在algorithm头文件中
#include <algorithm>
string intToA(int n,int radix)
string ans="";
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;
1. itoa()函数(可以将一个10进制数转换为任意的2-36进制字符串)
函数原型:char* itoa(int value, char* string, int radix);
例如:itoa(num,str,2); num是一个int型的,是要转换的10进制数,str是转换结果,后面的值为目标进制。
#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;
三)使用字符串流stringstream(头文件 #include <sstream>)
1.将八,十六进制转十进制(string转int)
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
string s="20";
int a;
stringstream ss;
ss<<hex<<s; //以16进制读入流中
ss>>a; //10进制int型输出
cout<<a<<endl;
return 0;
//输出:32
2.将十进制转八,十六进制(int转string)
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
int main()
string s1,s2;
int a=30;
stringstream ss;
ss<<oct<<a; //10进制转成八进制读入流中,再以字符串输出
ss>>s1;
cout<<s1<<endl; //输出:36
ss.clear(); //不清空可能出错
ss<<hex<<a; //10进制转成十六进制读入流中,再以字符串输出
ss>>s2;
cout<<s2<<endl; //输出:1e
return 0;