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

Wesley13
• 阅读 497

思路:

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

代码结构图

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

全部代码:

#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

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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
浅梦一笑 浅梦一笑
2年前
Python 练手 &quot;小例子&quot; 闯关60题!
一、数字1求绝对值绝对值或复数的模In1:abs(6)Out1:62进制转化十进制转换为二进制:In2:bin(10)Out2:'0b1010'十进制转换为八进制:In3:oct(9)Out3:'0o11'十进制转换为十六进制:In4:hex(15)Out4:'0xf'3整数和ASCII互
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Easter79 Easter79
2年前
TypeScript 基本类型(一)
1、boolean布尔值true/falseletisDone:booleanfalse;2、number数字:和JavaScript一样,TypeScript里的所有数字都是浮点数。另外支持二进制,八进制,十进制,十六进制。letdecLiteral:number6;lethex
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Stella981 Stella981
2年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Easter79 Easter79
2年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这