C++中的各种进制转换函数汇总
C++中的各种进制转换函数汇总
1.在C中,按指定进制格式输出如下:
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
printf("%o\n",35); // 八进制格式输出:%o
printf("%d\n",35); // 十进制格式输出:%d
printf("%x",35); // 十六进格式制输出:%x或者%X
return 0;
}
// 输出结果:
43
35
23
2.在C++中,按指定进制格式输出如下:
#include <iostream>
using namespace std;
int main()
{
cout<<oct<<35<<endl; // 八进制输出格式 oct
cout<<dec<<35<<endl; // 十进制输出格式 dec
cout<<hex<<35<<endl; // 十六进制输出格式 hex
return 0;
}
// 输出:
43
35
23
3.任意2-36进制数转化为10进制数
- 自己写一个函数
建议自己可以去敲一敲,加深记忆
#include <iostream>
using namespace std;
int turn (string a,int t)
{
int sum=0;
for(int i=a.size()-1;i>=0;i--)
{
if(a[i]>='0'&&a[i]<='9')
sum=sum*t+a[i]-'0';
else
{
sum=sum*t+a[i]-'A'+10;
}
}
return sum;
}
int main()
{
string a;
int num,t;
while(cin>>a) // 超过10进制我们以大写字母表示
{
cin>>t; // t代表要转换的进制数
num=turn(a,t);
cout<<num<<endl;
}
return 0;
}
2.strtol函数
long int strtol(const char nptr, char **endptr, int base)
strtol()会将nptr指向的字符串,根据参数base,按权转化为long int, 然后返回这个值。
参数base的范围为2~36,和0;它决定了字符串以被转换为整数的权值。
可以被转换的合法字符依据base而定,举例来说,当base为2时,合法字符为‘0’,‘1’;base为8时,合法字符为‘0’,‘1’,……‘7’;base为10时,合法字符为‘0’,‘1’,……‘9’;base 为16时,合法字符为‘0’,‘1’,……‘9’,‘a’,……‘f’;base为24时,合法字符为‘0’,……‘9’,‘a’,……‘n’,base为36时,合法字符为‘0’,……‘9’,‘a’,……‘z’;等等。其中,不区分大小写,比如,‘A’和‘a’会都会被转化为10。
当字符合法时,‘0’,……‘9’依次被转换为十进制的0~9,‘a’,……‘z’一次北转换为十进制的10~35。
strtol()函数检测到第一个非法字符时,立即停止检测,其后的所有字符都会被当作非法字符处理。合法字符串会被转换为long int, 作为函数的返回值。非法字符串,即从第一个非法字符的地址,被赋给endptr。**endptr是个双重指针,即指针的指针。strtol()函数就是通过它改变*endptr的值,即把第一个非法字符的地址传给endptr。多数情况下,endptr设置为NULL, 即不返回非法字符串。
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char r[100];
int t;
while(~scanf("%s",r))
{
cin>>t; // t代表他原来的进制数
cout<<strtol(r,NULL,t)<<endl;
memset(r,'\0',sizeof(r));
}
return 0;
}
// C++11 特性!!!
注意:
①如果base为0,且字符串不是以0x(或者0X)开头,则按十进制进行转化。
②如果base为0或者16,并且字符串以0x(或者0X)开头,那么,x(或者X)被忽略,字符串按16进制转化。
③如果base不等于0和16,并且字符串以0x(或者0X)开头,那么x被视为非法字符。
④对于nptr指向的字符串,其开头和结尾处的空格被忽视,字符串中间的空格被视为非法字符。
4.将10进制数转换为任意的n进制数
建议自己写一个代码:
#include <iostream>
#include <cstring>
#include <stack>
using namespace std;
stack<char> s;
void turn (int t,int tmp)
{
while(t!=0)
{
if(t%tmp<=10)
s.push(t%tmp+'0');
else
s.push(t%tmp-10+'A');
t/=tmp;
}
}
int main()
{
int t,tmp;
while(cin>>t>>tmp)
{
turn(t,tmp);
while(!s.empty())
{
cout<<s.top();
s.pop();
}
cout<<endl;
}
return 0;
}
itoa函数
函数原型:*char*
*itoa(``intvalue,``char``*string,``intradix);例如:itoa(num, str, 2); num是一个int型的,是要转化的10进制数,str是转化结果,后面的值为目标进制。
PS:
itoa并不是一个标准的函数,而是一个windows所特有的,如需要跨平台请使用sprintf#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;
}
三)使用字符串流stringstream
引入头文件#include
1.将八,十六进制转十进制。
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(void)
{
string s="20";
int a;
stringstream ss;
ss<<hex<<s; //以16进制读入流中
ss>>a; //10进制int型输出
cout<<a<<endl;
return 0;
}
//输出:32
2.将十进制转八,十六进制。
#include<cstdio>
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main(void)
{
string s1,s2;
int a=30;
stringstream ss;
ss<<oct<<a; //10进制转成八进制读入流中,再以字符串输出
ss>>s1;
cout<<s1<<endl; //输出:36
ss.clear(); //不清空可能会出错。
ss<<hex<<a; //10进制转成十六进制读入流中,,再以字符串输出
ss>>s2;
cout<<s2<<endl; //输出:1e
return 0;
}
C++中的各种进制转换函数汇总的更多相关文章
- C++中的各种进制转换函数汇总及学习
一.指定格式输出 1.C中指定格式输出 printf(); //按八进制格式输出,保留5位高位补零 printf(); //按十进制格式输出,保留3位高位补零 printf(); //按十六进制格式输 ...
- Python中进制转换函数的使用
Python中进制转换函数的使用 关于Python中几个进制转换的函数使用方法,做一个简单的使用方法的介绍,我们常用的进制转换函数常用的就是int()(其他进制转换到十进制).bin()(十进制转换到 ...
- php进制转换函数
1 十进制(decimal system)转换函数 ① 十进制转二进制 string decbin(int number). 参数为一个十进制整型数字,不是整型数字会自动转为整型数字,如'3'转为3 ...
- 写一个比较全的进制转换函数--ic
//写一个比较全的进制转换函数-----未完成 #include <stdio.h> //D进制转换后 (比如10-2进制) 结果可能会很大 需要很长的字符串来存 #include < ...
- SQL Server 进制转换函数
一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下 ...
- Python内置进制转换函数(实现16进制和ASCII转换)
在进行wireshark抓包时你会发现底端窗口报文内容左边是十六进制数字,右边是每两个十六进制转换的ASCII字符,这里使用Python代码实现一个十六进制和ASCII的转换方法. hex() 转换一 ...
- chr()//ord() //进制转换函数//eval()//文件函数//split()
1.chr() 函数 chr() 用一个范围在 range(256)内的(就是0-255)整数作参数,返回一个对应的字符. 用法:chr(i) i可以是10进制也可以是16进制的形式的数字. 2.or ...
- delphi 中字符串与16进制、10进制转换函数
//字符串转成16进制代码function strToHexStr(str:string):string;varc:char;ss:string;i:integer;beginwhile str& ...
- c++ 进制转换函数
转自:https://blog.csdn.net/wangjunchengno2/article/details/78690248 strtol 函数: 它的功能是将一个任意1-36进制数转化为10进 ...
随机推荐
- 今夜我懂了Lambda表达式_解析
现在时间午夜十一点~ 此刻的我血脉喷张,异常兴奋:因为专注得学习了一把java,在深入集合的过程中发现好多套路配合Lambda表达式真的是搜椅子,so开了个分支,决定从"只认得", ...
- 谈谈集合.Stream Api
1. 什么是stream API Java8提供的stream API可以让程序员像操作数据库一样操作集合.Stream API可以极大提高Java程序员的生产力,让程序员写出高效率.干净.简洁的代码 ...
- 22 Specifications动态查询
Specifications动态查询 有时我们在查询某个实体的时候,给定的条件是不固定的,这时就需要动态构建相应的查询语句,在Spring Data JPA中可以通过JpaSpecificationE ...
- 看逐浪CMS技术小哥做SVG动画(附使用Bodymovin和Lottie将Adobe After Effects(AE)程式转为 HTML5/Android/iOS原生的动画全过程-即AE转svg\canvas\html5动画)
名词解解释 adobe After Effects AE:adobe After Effects,adobe公司的专业视频制作软件. Bodymovin插件预览 Bodymovin:是一个AE的插 ...
- django 从零开始 13 返回文件
进行一些操作返回文件,flask和django差不多,基本都是在返回response 并且对其中的返回头部写入返回文件信息 # image def image(request): f = open(r ...
- Spring Boot从入门到精通(九)整合Spring Data JPA应用框架
JPA是什么? JPA全称Java Persistence API,是Sun官方提出的Java持久化规范.是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中. ...
- vue中moment.js的使用
一.介绍 moment.js是一款现在对时间处理的强大的函数. Moment被设计用于在浏览器和Node.js中工作. 目前ci系统使用的浏览器有:IE8.IE9在Windows 7上.Chrome在 ...
- Java注解 看这一篇就够了
注解 1.概念 注解:说明程序的.给计算机看的 注释:用文字描述程序的.给程序员看的 注解的定义:注解(Annotation),也叫元数据.一种代码级别的说明.它是JDK1.5及以后版本引入的一个特性 ...
- C++ json解决方案
前段时间用到C++来封装com 因此从数据转换上我采用的Json来当两种语言的传递方式,现做下json的序列化与反序列化方案的总结: Rapidjson 文档地址:http://rapidjson.o ...
- Python入门到放弃
前传:计算机基础 01-计算机基础1 02-计算机基础2 第一章:Python入门 01-python入门之解释器环境安装 02-python入门之变量和基本数据类型 03-python内存管理之垃圾 ...