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进制数

  1. 自己写一个函数

建议自己可以去敲一敲,加深记忆

#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(``int value,``char``*string,``int radix);

    例如:itoa(num, str, 2); num是一个int型的,是要转化的10进制数,str是转化结果,后面的值为目标进制。

    PSitoa并不是一个标准的函数,而是一个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++中的各种进制转换函数汇总的更多相关文章

  1. C++中的各种进制转换函数汇总及学习

    一.指定格式输出 1.C中指定格式输出 printf(); //按八进制格式输出,保留5位高位补零 printf(); //按十进制格式输出,保留3位高位补零 printf(); //按十六进制格式输 ...

  2. Python中进制转换函数的使用

    Python中进制转换函数的使用 关于Python中几个进制转换的函数使用方法,做一个简单的使用方法的介绍,我们常用的进制转换函数常用的就是int()(其他进制转换到十进制).bin()(十进制转换到 ...

  3. php进制转换函数

    1 十进制(decimal system)转换函数 ① 十进制转二进制 string  decbin(int number). 参数为一个十进制整型数字,不是整型数字会自动转为整型数字,如'3'转为3 ...

  4. 写一个比较全的进制转换函数--ic

    //写一个比较全的进制转换函数-----未完成 #include <stdio.h> //D进制转换后 (比如10-2进制) 结果可能会很大 需要很长的字符串来存 #include < ...

  5. SQL Server 进制转换函数

    一.背景 前段时间群里的朋友问了一个问题:“在查询时增加一个递增序列,如:0x00000001,即每一个都是36进位(0—9,A--Z),0x0000000Z后面将是0x00000010,生成一个像下 ...

  6. Python内置进制转换函数(实现16进制和ASCII转换)

    在进行wireshark抓包时你会发现底端窗口报文内容左边是十六进制数字,右边是每两个十六进制转换的ASCII字符,这里使用Python代码实现一个十六进制和ASCII的转换方法. hex() 转换一 ...

  7. chr()//ord() //进制转换函数//eval()//文件函数//split()

    1.chr() 函数 chr() 用一个范围在 range(256)内的(就是0-255)整数作参数,返回一个对应的字符. 用法:chr(i) i可以是10进制也可以是16进制的形式的数字. 2.or ...

  8. delphi 中字符串与16进制、10进制转换函数

      //字符串转成16进制代码function strToHexStr(str:string):string;varc:char;ss:string;i:integer;beginwhile str& ...

  9. c++ 进制转换函数

    转自:https://blog.csdn.net/wangjunchengno2/article/details/78690248 strtol 函数: 它的功能是将一个任意1-36进制数转化为10进 ...

随机推荐

  1. 一个轻量级的基于 .NET Core 的 ORM 框架 HSQL

    HSQL 是一种轻量级的基于 .NET Core 的数据库对象关系映射「ORM」框架 HSQL 是一种可以使用非常简单且高效的方式进行数据库操作的一种框架,通过简单的语法,使数据库操作不再成为难事.目 ...

  2. Python3爬虫使用requests爬取lol英雄皮肤

    本人博客:https://xiaoxiablogs.top 此次爬取lol英雄皮肤一共有两个版本,分别是多线程版本和非多线程版本. 多线程版本 # !/usr/bin/env python # -*- ...

  3. 使用Navicat Premiun远程连接MySQL失败,报错(10038)

    远程连接MySQL失败,可能有一下原因: 1.小伙子/小姑凉注意一下你的ip是否输入正确了!! 2.网络或防火墙问题 1).排查网络问题 使用命令:ping 192.168.1.1 查看网络请求是否超 ...

  4. ffmpeg 编程常用 pcm 转 aac aac 转 pcm mp4 h264解码

    ffmpeg 是现在开源的全能编解码器,基本上全格式都支持,纯 c 语言作成,相对比其它的 VLC ,GStreamer glib2 写的,开发更简单些,文档很棒,就是 examples 比较少. 常 ...

  5. 使用jquery实现动态时钟

    先导入jquery-1.7.2.min.js或其他版本文件 js部分 <script> $(function () { showTime(); //文档加载后.就开始显示时间 var se ...

  6. LeetCode 136、137、260(只出现一次的数,异或性质及应用)

    First. 陈列一下“异或”的一些性质 异或是一种基于二进制的位运算,用符号XOR或者 ^ 表示,其运算法则是对运算符两侧数的每一个二进制位,同值取0,异值取1. 它与布尔运算的区别在于,当运算符两 ...

  7. javascript中怎么判断两个数据类型相等

    在 JavaScript 中,判断一个变量的类型尝尝会用 typeof 运算符,在使用 typeof 运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回 "obj ...

  8. (转)浅析epoll – epoll函数深入讲解

    原文地址:http://www.cppfans.org/1418.html 浅析epoll – epoll函数深入讲解 前一篇大致讲了一下epoll是个什么东西,优点等内容,这篇延续上一篇的内容,主要 ...

  9. Codeforces Round #200 (Div. 2)E

    Read Time 题意:有一个数组,很多指针指在这个数组上,每次每个指针可以向左或向右移动一个位置.给出一些需要访问的位置,问访问用的最少时间. 一个指针只可能转一次方向.二分答案. #includ ...

  10. scrapy框架Request函数callback参数为什么是self.parse而不是self.parse( )

    加括号是调用函数,不加括号是指的是函数地址,此处只需要传入函数的地址,等待程序到时调用即可