美文网首页C/C++学习笔记
C++ 十六进制、八进制与十进制之间的转换

C++ 十六进制、八进制与十进制之间的转换

作者: 零岁的我 | 来源:发表于2020-04-19 22:09 被阅读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/

    相关文章

      网友评论

        本文标题:C++ 十六进制、八进制与十进制之间的转换

        本文链接:https://www.haomeiwen.com/subject/yghwbhtx.html