C++ 十六进制、八进制与十进制之间的转换
2020-04-19 本文已影响0人
零岁的我
懒得写了,详情看注释啦。
实验代码
#include<iostream>
#include<cmath>
#include<string>
#include<sstream>
#include<iomanip>
using namespace std;
int hex2dec(string hexstr)
{
int num=0;
int len=hexstr.length();
for(int i=len-1;i>1;--i){
if(hexstr[i]>='0' && hexstr[i]<='9'){
num+=(hexstr[i]-'0')*pow(16,len-i-1);
}
else if(hexstr[i]>='A' && hexstr[i]<='F'){
num+=(hexstr[i]-'A'+10)*pow(16,len-i-1);
}
else if(hexstr[i]>='a' && hexstr[i]<='f'){
num+=(hexstr[i]-'a'+10)*pow(16,len-i-1);
}
else{
return -1;
}
}
return num;
}
/*使用stringstream处理进制转换问题
<sstream>库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。
1.stringstream::str(); returns a string object with a copy of the current contents of the stream.
2.stringstream::str (const string& s); sets s as the contents of the stream, discarding any previous contents.
3.stringstream清空,stringstream s; s.str("");
*/
//十六进制字符串转十进制数字
int hex2dec1(string hexstr)
{
int decn;
stringstream ss;
ss.str(hexstr);
ss>>hex>>decn;
return decn;
}
//八进制字符串转十进制数字
int oct2dec(string octstr)
{
int decn;
stringstream ss;
ss.str(octstr);
ss>>oct>>decn;
return decn;
}
//十进制数字转十六进字符串
string dec2hex(int decn)
{
stringstream ss;
// ss<<hex<<decn;
// ss<<"0x"<<hex<<decn;
//使用输出流操作算子制定输出格式
/*
1. setw(w):指定输出宽度为w个字符;
2. setfill(c):在指定宽度下,输出字符不足时用c填充,默认空格填充;
3. uppercase:十六进制数中使用 A~E。若输出前缀,则前缀输出'0X',科学计数法中输出E.
*/
ss<<uppercase<<"0x"<<setfill('0')<<setw(4)<<hex<<decn;
string hexstr=ss.str();
return hexstr;
}
//十进制转八进制字符串
string dec2oct(int decn)
{
stringstream ss;
ss<<oct<<decn;
string octstr=ss.str();
return octstr;
}
int main(int argc,char **argv)
{
// string hexstr;
// while(getline(cin,hexstr)){
// int n=hex2dec(hexstr);
// if(n==-1) break;
// cout<<n<<endl;
// int m=hex2dec1(hexstr);
// cout<<m<<endl;
// }
string hexstr;
int decn;
string octstr;
cout<<"--------十六进制转十进制---------"<<endl;
cout<<"请输入一个十六进制整数('0x/0X'开头):";
cin>>hexstr;
decn=hex2dec(hexstr);
cout<<"对应的十进制整数为:"<<decn<<endl;
cout<<"---------八进制转十进制---------"<<endl;
cout<<"请输入一个八进制整数('0'开头):";
cin>>octstr;
decn=oct2dec(octstr);
cout<<"对应的十进制整数为:"<<decn<<endl;
cout<<"--------十进制转十六进制---------"<<endl;
cout<<"请输入一个十进制整数:";
cin>>decn;
hexstr=dec2hex(decn);
cout<<"对应的十六进制数为:"<<hexstr<<endl;
cout<<"--------十进制转八进制----------"<<endl;
cout<<"请输入一个十进制整数:";
cin>>decn;
octstr=dec2oct(decn);
cout<<"对应的八进制数为:"<<octstr<<endl;
return 0;
}
实验截图
注意:C++中输入八进制数必须以数字0开头。
有关stringstream的详细使用可以参考链接:http://www.cplusplus.com/reference/sstream/stringstream/