zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    ngnix+uwsgi+django 部署mezzanine
    shell三剑客之find
    Flask常见面试问题
    redis宕机如何解决?如果是项目上线的宕机呢?
    UiPath,容智Ibot在线接单,有需求的欢迎过来
    CORS和CSRF
    JWT黑名单和白名单
    Django项目常见面试问题
    降低Redis内存占用
    Redis-缓存有效期与淘汰策略
  • 原文地址:https://www.cnblogs.com/simuhunluo/p/8632891.html
Copyright © 2011-2022 走看看