其它进制转为十进制

在实现这个需求之前,先简单介绍一个c标准库中的一个函数:

long strtol( const char *str, char **str_end, int base);

参数详细说明请参考文档

注意:这个函数在c标准库stdlib中,所以需要#include<cstdlib>

用法参考

#include <stdio.h>
#include <errno.h>
#include <stdlib.h> int main(void)
{
// parsing with error handling
const char *p = "10 200000000000000000000000000000 30 -40 junk";
printf("Parsing '%s':\n", p);
char *end;
for (long i = strtol(p, &end, 10);p != end;i = strtol(p, &end, 10))
{
printf("'%.*s' -> ", (int)(end-p), p);
p = end;
if (errno == ERANGE){
printf("range error, got ");
errno = 0;
}
printf("%ld\n", i);
} // parsing without error handling
printf("\"1010\" in binary --> %ld\n", strtol("1010",NULL,2));
printf("\"12\" in octal --> %ld\n", strtol("12",NULL,8));
printf("\"A\" in hex --> %ld\n", strtol("A",NULL,16));
printf("\"junk\" in base-36 --> %ld\n", strtol("junk",NULL,36));
printf("\"012\" in auto-detected base --> %ld\n", strtol("012",NULL,0));
printf("\"0xA\" in auto-detected base --> %ld\n", strtol("0xA",NULL,0));
printf("\"junk\" in auto-detected base --> %ld\n", strtol("junk",NULL,0));
}

Output

Parsing '10 200000000000000000000000000000 30 -40 junk':
'10' -> 10
' 200000000000000000000000000000' -> range error, got 9223372036854775807
' 30' -> 30
' -40' -> -40
"1010" in binary --> 10
"12" in octal --> 10
"A" in hex --> 10
"junk" in base-36 --> 926192
"012" in auto-detected base --> 10
"0xA" in auto-detected base --> 10
"junk" in auto-detected base --> 0

更多详细说明请参考文档

接下来使用这个函数来实现其它进制转为十进制的需求,具体请参考代码:

#include<iostream>
#include<cstdlib>
using namespace std;
int main(){
//把8进制的17转化为10进制打印输出
string str = "17";
char *tmp ;
long result = strtol(str.c_str(),&tmp,8);
cout<<result;
return 0;
}

Output

15

十进制转为其他进制

目前没有找到可以使用的库函数来方便的实现这个需求,所以自己实现了一下,具体请参考代码:

#include<iostream>
#include<algorithm>
using namespace std;
//digital为10进制数,r为需要转换的目标进制,返回目标进制数
string dtox(int digital,int r){
string result="";
const char s[37]="0123456789abcdefghijklmnopqrstuvwxyz";
if(digital==0){
return "0";
}
while(digital!=0){
int tmp =digital%r;
result+=s[tmp];
digital/=r;
}
reverse(result.begin(),result.end());
return result;
}
int main(){
cout<<"十进制10转为16进制结果:"<<dtox(10,16)<<endl;
cout<<"十进制10转为8进制结果:"<<dtox(10,8)<<endl;
cout<<"十进制10转为2进制结果:"<<dtox(10,2)<<endl;
cout<<"十进制10转为10进制结果:"<<dtox(10,10)<<endl;
}

Output:

十进制10转为16进制结果:a
十进制10转为8进制结果:12
十进制10转为2进制结果:1010
十进制10转为10进制结果:10

实现效果还算理想,另外,这个函数还可以把10进制数转化为不常用的其他进制,不局限于2,8,10,16等常见进制。但是r的有效范围应该为2-36。

另外,函数并没有考虑负数以及浮点数,r不合法的情况

轻松实现C/C++各种常见进制相互转换的更多相关文章

  1. php实现文件与16进制相互转换

    php实现文件与16进制相互转换 <pre><?php/** * php 文件与16进制相互转换 * Date: 2017-01-14 * Author: fdipzone * Ve ...

  2. Python语言中各种进制相互转换

    目录 Python语言中各种进制相互转换 将二进制.八进制.十进制的数分别转换成十进制的方法 将十进制转换成二进制.八进制.十六进制 Python语言中各种进制相互转换 本文参考自https://ww ...

  3. 一个小公式帮你轻松将IP地址从10进制转到2进制

    网络工程师经常会遇到的一个职业问题:如何分配IP,通过子网如何捕捉某一网段或某台机器?他们甚至能够进行精准的分析和复杂的开发......凡此种种,其实与一些他们头脑中根深蒂固的常识性理论存有某种内在的 ...

  4. HDOJ(HDU) 2106 decimal system(进制相互转换问题)

    Problem Description As we know , we always use the decimal system in our common life, even using the ...

  5. sql 进制转换,支持93内的进制相互转换

    功能:实现在SQL内进制的互相转换,支持从2 - 93进制内的转换,若需要支持其他字符,可以自定义@ym变量实现扩充 -- ====================================== ...

  6. PHP进制转换[实现2、8、16、36、64进制至10进制相互转换]

    自己写了一个PHP进制转换程序,一个类吧,第一次写这个东东,写这个东东,在处理文本文件时能用得到.   可以实现: 10进制转换2.8.16.36.62进制2.8.16.36.62进制转换10进制 有 ...

  7. java中 8进制 10进制 2进制 16进制 相互转换

    十进制转成十六进制: Integer.toHexString(int i) 十进制转成八进制 Integer.toOctalString(int i) 十进制转成二进制 Integer.toBinar ...

  8. Delphi - 10进制16进制相互转换

    10进制转16进制 使用IntToHex可以实现十进制到十六进制的转换,注意这里的参数有两个,第一个表示需要被转换的10进制数,第二个表示转换后用几位来显示16进制数. 代码如下: function ...

  9. [leetcode]168. Excel Sheet Column Title表格列名编码(十进制和多进制相互转换)

    其实就是一道,十进制转多进制的题 十进制转多进制就是从后边一位一位地取数. 这种题的做法是,每次用n%进制,相当于留下了最后一位,然后把这位添加到结果最前边.结果需要转为进制的符号. 下一次循环的n变 ...

随机推荐

  1. JVM垃圾回收(上)

    Java 中的垃圾回收,常常是由 JVM 帮我们做好的.虽然这节省了大家很多的学习的成本,提高了项目的执行效率,但是当项目变得越来越复杂,用户量越来越大时,还是需要我们懂得垃圾回收机制,这样也能进行更 ...

  2. 懒要懒到底,能自动的就不要手动,Hibernate正向工程完成Oracle数据库到MySql数据库转换(含字段转换、注释)

    需求描述 需求是这样的:因为我们目前的一个老项目是Oracle数据库的,这个库呢,数据库是没有注释的,而且字段名和表名都是大写风格,比如 在代码层面的po呢,以前也是没有任何注释的,但是经过这些年,大 ...

  3. Elastic Stack 简介

    一.ElasticSearch ElasticSearch 是一个基于 Apache Lucene 的开源搜索引擎.它通过RESTful API 来隐藏Lucene的复杂性,从而让全文搜索变得简单.不 ...

  4. python编程系列---global的使用注意点

    global用法虽然很简单,当在函数中要修改全局变量时要使用到,但也要注意一个小问题,看下面的代码: 调用append()方法,只是修改,并不是赋值操作,不需要global提前声明 temp_num ...

  5. Redis学习四(运维指南).

    一.上线规划 一般 redis 的参数配置都在 redis.conf 中,在上线前根据实际环境配置好合适参数,能有效提高 redis 的可用性. redis 的运行机器 CPU 不求核数多,但求主频高 ...

  6. Smali语言基础语法

    1.Smali语言基础语法-数据类型与描述符 smali中有两类数据类型:基本类型和引用类型.引用类型是指数组和对象,其它都是基础类型. 基本类型以及每种类型的描述符: Java类型 类型描述符 说明 ...

  7. Leetcode(10)正则表达式匹配

    Leetcode(10)正则表达式匹配 [题目表述]: 给定一个字符串 (s) 和一个字符模式 (p).实现支持 '.' 和 '*' 的正则表达式匹配. '.' 匹配任意单个字符. '*' 匹配零个或 ...

  8. MySQL GROUP_CONCAT()函数 -- 字段合并查询

    在做查询的时候遇到一个问题,今天分享一下解决方法. 先看一下我想要什么效果. 清单名称类型要点,后面两列为清单步骤(外键表) 但我并不想让主表的内容重复那么多遍,于是 distinct去重.子查询.左 ...

  9. 为什么要用dubbo,dubbo是什么,为什么要和zk结合使用?

    目录 为什么要用dubbo dubbo是什么 dubbo架构 dubbo和zk关系 为什么要用dubbo? 随着互联网的发展,网站的应用规模不断扩大,常规的垂直架构已经无法应,分布式服务架构势在必行, ...

  10. 基于 HTML5 + Canvas 实现的 PID 可视化系统

    前言 随着工业物联网和互联网技术的普及和发展,人工填料的方式已经逐渐被机械设备取代.工业厂商减小误操作.提升设备安全以及追求高效率等制造特点对设备的要求愈加高标准.严要求.同时机械生产以后还需遵从整个 ...