【总结】C++各种进制转换函数汇总_程序员史迪仔的博客-程序员宝宝_c++进制转换函数



前言


进制之间的转换有两种方法:

  1. 自定义进制转换函数:将一个n进制的数转换为m进制的数,这个过程需要一个过渡,就是先将一个n进制的数转换为10进制,再将十进制数转换为m进制的数,任意进制转换为十进制的思路就是按权展开,十进制转任意进制就是求余数,直到商数为零,然后逆向取余。

  2. 调用C++中的STL函数直接转换



一、指定格式转换输出


思路: 直接通过C/C++输出格式转换为相应进制的数。

例如:

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <bitset>
using namespace std;
int main(){
    
	printf("%05o\n",300);    //按八进制格式输出,保留5位高位补零
	printf("%03d\n",300);    //按十进制格式输出,保留3位高位补零
	printf("%05x\n",300);    //按十六进制格式输出,保留5位高位补零
	cout<<"300的8进制:"  <<std::oct <<300<<endl;  	//按八进制格式输出
    cout<<"300的10进制:" <<std::dec <<300<<endl;  	//按十进制格式输出
    cout<<"300的16进制:" <<std::hex <<300<<endl;  	//按十六进制格式输出
    cout<<"300的2进制:"  <<bitset<8>(300)<<endl;    //<8>:表示保留8位输出
	return 0;
}

输出结果:
在这里插入图片描述



二、任意2~36进制数转化为10进制数


自定义进制转换函数:

//m是要转换成的进制,s是给定的m进制下的字符串
//结果为int型
int binary(int m, string s){
     
    int ans=0;
    for(int i=0;i<s.size();i++){
    
        char t=s[i];
        if(t>='0'&&t<='9') 
			ans=ans*m+t-'0';
        else 
			ans=ans*m+t-'a'+10;
    }
    return ans;
}


三、10进制数转换为任意的n进制数


1、自定义进制转换函数:

//n是待转换的十进制数,m是待转换成的进制数 
string intToA(int n,int m){
    
    string ans="";
    do{
    		 //使用do{}while()循环类型以防止输入为0的情况
        int t=n%m;
        if(t>=0&&t<=9)    
			ans+=(t+'0');
        else 
			ans+=(t+'a'-10);
        n/=m;
    }while(n);   
    reverse(ans.begin(),ans.end());
    return ans;    
}

2、_itoa() 函数:

头文件: #include <cstdlib>

作用: 将一个10进制数转换为任意的2-36进制字符串

格式: itoa(num, str, m); num是一个int型的,是要转化的10进制数,str是转化结果,m为目标进制。

代码如下:

#include<cstdio> 
#include<cstdlib> 
int main(){
      
    int num = 10;  
    char str[100];  
    _itoa(num, str, 2);  //c++中一般用_itoa,用itoa也行,
    printf("%s\n", str);  
    return 0;  
}


四、使用字符串流string,stream进制转换


1、 8、10和16进制字符串转换为int型10进制

代码如下:

#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(){
    
    string s="20";
    int a,b,c;
    stringstream ss1;
    ss1<<hex<<s;   //以16进制读入流中
    ss1>>a;        //10进制int型输出
    cout<<a<<endl;
    stringstream ss2;	
    ss2<<oct<<s;  //以8进制读入流中
	ss2>>b;		  //10进制int型输出
	cout<<b<<endl;
	stringstream ss3;
	ss3<<dec<<s;  //以10进制读入流中
	ss3>>c;		  //10进制int型输出
	cout<<c<<endl;
    return 0;
}

输出结果:
在这里插入图片描述

2、int型10进制转换为string型8、10和16进制

代码如下:

#include<cstdio>
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(){
    
    string s1,s2,s3;
    int a=30;			//10进制 
    stringstream ss;
    ss<<oct<<a;        //10进制转成8进制读入流中
    ss>>s1;            //以字符串输出 
    cout<<s1<<endl;    //输出:36
    ss.clear();        //不清空可能会出错。
    ss<<hex<<a;        //10进制转成16进制读入流中
    ss>>s2;            //以字符串输出 
    cout<<s2<<endl;    //输出:1e
    ss.clear();
	ss<<dec<<a;		   //10进制转成10进制读入流中
	ss>>s3;			   //以字符串输出 
	cout<<s3<<endl; 
    return 0;
}

输出结果:
在这里插入图片描述



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44668898/article/details/101443574

智能推荐

话说ASCII,Unicode,UTF-8_Jacketinsysu的博客-程序员宝宝

重新温习了一下python2(廖雪峰的教程很赞),希望能够温故而知新一点,对学过的东西不要只是肤浅地理解,这也符合人的认知规律(螺旋式的上升)。看到字符串编码的时候,想搞明白Unicode和UTF-8到底是什么,有什么关系,因为平时都是无脑用UTF-8,大概知道它是个可变长的编码方案,并且能够对目前世界上所有的文字编码(真的吗?其实没那么夸张啦,只是涵盖了绝大部分会用到的,目前Unicode标准还在

在linux7.1上安装jdk+tomcat+oracle9i 笔记_herrapfel的博客-程序员宝宝_oracle12c plsql/lib/ins_plsql.mk

    本文借鉴了http://www.puschitz.com/的文章:Installing Oracle 9i on RedHat Linux 7.1, 7.2, 7.3, 8.0, 9, Red Hat Advanced Server 2.1, and on

python学习笔记11--RabbitMQ、Redis使用_weixin_30820151的博客-程序员宝宝

一、RabbitMQ  1、进程间通信问题  在某些情况下,我们机器上不同的进程可能需要通信,但是我们知道,进程中的数据都是独享的,不同进程是无法访问其他进程内部的数据的,那我们就需要借助一个第三方的中介来实现数据通信,其中我想到的可能采用的方法有如下几种:  a、通过文件,将要交互的信息写入文件,从而实现数据通信和共享(例如使用json)  b、通过socket,程序间...

Hive on Spark 调优_微步229的博客-程序员宝宝

hive on spark 性能远比hive on mr 要好,而且提供了一样的功能。用户的sql无需修改就可以直接运行于hive on spark。 udf函数也是全部支持。个人觉得还不错的一篇Hive on Spark 调优,做个记录原文见:https://mp.weixin.qq.com/s/ITwwTDkWVwToshjHQEp5Dg...

结合使用saiku、mondrian workbentch建立多维查询报表_aijia7039的博客-程序员宝宝

1、简介前几篇博客已经介绍了saiku、mondrian、MDX和模式文件他们之间的关系,那么如何将它们串联起来,供产品人员使用哪?下面咱们一步一步的实现2、建立数据表建表语句参考:http://www.cnblogs.com/liqiu/p/5202708.html模式图如下:这是一个典型的事实表+维度表的星型数据结构!3、建立模式文件这里就不说具体细节...

机器人导航时,运行move_base时出现机器人抖动,不听使唤的解决办法_小吉努力加油的博客-程序员宝宝

问题简介:运行古月的导航包时,在RVIZ中点击2D NAV GOAL机器人不运动,只出现原地抖动。解决办法:在mbot_description/urdf/xacro/gazebo/mbot_base_gazebo.xacro中将左右轮兑换位置。具体代码如下: &lt;wheel prefix="left" reflect="1"/&gt; &lt;wheel prefix="right" reflect="-1"/&gt;...

随便推点

hashCode()和equals()的区别_mesie美希的博客-程序员宝宝

hashCode()和equals()都是从object类继承过来的方法,其作用是一样,用来对比两个对象是否相等一致。这里主要从两个角度介绍了他们的区别:一个是性能,一个是可靠性。1、equals()既然已经能实现对比的功能了,为什么还要hashCode()呢?因为重写的equals()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个has...

c语言swap函数数组,有关两个数组的交换,涉及到swap语句,而这条语句就是有问题。..._牧岛藤子的博客-程序员宝宝

该楼层疑似违规已被系统折叠隐藏此楼查看此楼}break;}}intmain(intargc,char*argv[]){inta[count];intb[count];srand((unsigned)time(NULL));longlNum=0;for(inti=0;i{lNum=rand()%count;if(i%10==0)printf("\n");p...

CIE色度图_萧戈的博客-程序员宝宝_cie图怎么看

色度图是黑体轨迹的函数表达式v=f(u)在色度学中以色度坐标表示的平面图。而黑体不同温度的光色变化在色度图上又形成了一个弧形轨迹这个轨迹叫做普朗克轨迹或黑体轨迹。色度学系统的应用随着人们交流、传输、研究颜色信息的需要已经建立了多种各具特色的表色系统本研究采用了CIE1931标准色度学系统和CIE1976均匀色空间。从380nm到780nm的光谱色在CIE 1931 RGB色度图上的轨迹长这样: 而所有人眼能识别出来的颜色,都由单色光相加而成,因此上图曲线上的任意两点画出来的线段所覆盖的...

tensorflow的session.run运行一个op和多个op的区别_lusic01的博客-程序员宝宝

背景:session.run方法可以传入一个op,也可以传入op列表,例如,我们希望执行op1和op2,有两种写法:sess.run(op1)sess.run(op2)和sess.run([op1, op2])如果op1和op2有相互包含关系,第写法1会将op1和op2的图各完整执行一遍,而写法2不会重复执行op1和op2中的公共部分。例如:# coding: u...

计算机基础与应用23页思考与实训,计算机应用基础实训与习题指导(Windows 7+Office 2010)..._白绍伟的博客-程序员宝宝

前言第一部分 计算机应用基础实训指导第1章 计算机基础知识实训实训一 开关机及指法训练第2章 Windows 7操作系统实训实训二 Windows 7基本操作实训三 Windows 7文件及文件夹的管理第3章 Word 2010的应用实训实训四 Word 2010文档操作与基本编辑技术实训五 Word 2010文档排版实训六 Word 2010表格制作实训七 W...

DNS RR代码和含义_djph26741的博客-程序员宝宝

记录类型代码号码定义的 RFC描述功能A1RFC 1035IP 地址记录传回一个 32 比特的 IPv4 地址,最常用于映射主机名称到 IP地址,但也用于DNSBL(RFC 1101)等。AAAA28RFC 3596IPv6 IP 地址记录传回一个 128 比特的 IPv6 地址,最常用于映射主机名称到 IP 地址。...