C++ 进制转换 十进制十六进制八进制二进制相互转换

思路:

  1. 下面我把相互转换的所有类型都写出来了。实际上都是通过十进制中转的,这样比较简单,写出X进制转成十进制和从十进制转成X进制的两份代码直接拷贝就完成了剩余的部分。哦,对,自己封装了一个charToDigit函数,主要是将字符转为数字用的。
  2. 十六进制转十进制转八进制:
  3. 其他同理

代码结构图

全部代码:

#include <iostream>
#include <math.h>
#include <sstream>//使用该库函数的ostringstream,将int变成string
using namespace std;

//字符转数字
int charToDigit(char c)
{
    if(c=='A')
        return 10;
    else if(c=='B')
        return 11;
    else if(c=='C')
        return 12;
    else if(c=='D')
        return 13;
    else if(c=='E')
        return 14;
    else if(c=='F')
        return 15;
    else
        return c-'0';
}

int jinzhi16to10(string pre)
{
    int length=pre.size();
    int result=0;
    for(int i=0; i<length; i++)
    {
        result+=((charToDigit(pre[i]))*pow(16,length-1-i));
    }
    return result;
}

int jinzhi8to10(string pre) {
    int length=pre.size();
    int result=0;
    for(int i=0; i<length; i++)
    {
        result+=((charToDigit(pre[i]))*pow(8,length-1-i));
    }
    return result;
}

int jinzhi2to10(string pre)
{
    // 在此处可以添加验证是否为二进制数字的逻辑
    int length=pre.size();
    int result=0;
    for(int i=0; i<length; i++)
    {
        result+=((charToDigit(pre[i]))*pow(2,length-1-i));
    }
    return result;
}

string jinzhi10to2(int pre) {
    ostringstream oss;
    while(pre!=0){
        oss<<pre%2;
        pre/=2;
    }
    string res=oss.str();
    oss.str("");//清空原数据流
    for(int i=0;i<res.length();i++){
        oss<<res[res.length()-i-1];
    }
    return oss.str();
}
string jinzhi10to8(int pre) {
    ostringstream oss;
    while(pre!=0){
        oss<<pre%8;
        pre/=8;
    }
    string res=oss.str();
    oss.str("");//清空原数据流
    for(int i=0;i<res.length();i++){
        oss<<res[res.length()-i-1];
    }
    return oss.str();
}
string jinzhi10to16(int pre) {
    ostringstream oss;
    while(pre!=0){
        oss<<pre%16;
        pre/=16;
    }
    string res=oss.str();
    oss.str("");//清空原数据流
    for(int i=0;i<res.length();i++){
        oss<<res[res.length()-i-1];
    }
    return oss.str();
}
int main()
{
    /**
    用于从控制台获取字符串A
       int n;
       cin>>n;
       string *A=new string[n];
       for(int i=0;i<n;i++){
           cin>>A[i];
       }*/

    cout<<jinzhi10to2(jinzhi16to10("A2"));
}



欢迎关注微信公众号“IT客“ ,投稿邮箱 itkeyy@163.com

posted @ 2018-03-23 18:52  须小弥  阅读(8648)  评论(1编辑  收藏  举报