c/c++进制转换方法汇总(含全部代码)

2023-11-05

进制转换方法汇总表
原进制 转换进制 方法1 方法2 方法3 方法4
十进制 二进制 bitset指定格式输出   除留余数法 itoa
十进制 八进制 oct/%o指定格式输出 除留余数法 itoa
十进制 十六进制 hex/%x指定格式输出 除留余数法 itoa
十进制 其他进制     除留余数法 itoa
二进制 八进制 三位一组      
二进制 十进制 按权展开     strtol
二进制 十六进制 四位一组      
八进制 二进制 一位换三   除留余数法  
八进制 十进制 按权展开   strtol
八进制 十六进制      
十六进制 二进制 一位换四   除留余数法  
十六进制 八进制      
十六进制 十进制 按权展开   strtol

基本操作函数:

Atoi(string &S, int R) 任意进制转十进制(All Radix to Int) 参数:任意进制字符串 进制R 作用:利用按权展开加和,返回十进制
Itoa(int Num,int R) 十进制转任意进制(Int to All Radix)参数:十进制数Num,进制R 作用:利用除留余数法,返回逆序的余数,即返回所要转换的进制数

功能实现函数:

ToAll() 十进制转任意进制 调用函数Itoa,自带的itoa
ToDecimal(string &S) 任意进制转十进制函数 调用Atoi函数,strtol函数
ZhiDing() 作用:利用std的hex dec 以及 bitset,c语言的%o,%x
Stream() 作用:利用sstream头文件将数按某进制读入流,输出流

1.任意进制转十进制

【分析】按权展开,求和即可。例如,二进制数110,即4+2+0=6;另外,不想自己写的话,有strtol函数(百度百科)。

long int strtol(const char *nptr,char **endptr,int base);参数:字符串,非法字符指针,字符串中的进制

考虑的很详细,字符串中含有非法的字符(,.*等)时还能停止转换,并返回指针。

2.十进制转任意进制

【分析】除留余数法,逆序输出余数即可。另外,如果自己不想写的话,有itoa函数。

string itoa(int x,char *string,int jz);参数:想要转换的数,转换结果字符串,转换结果的进制

3.指定格式与流

【分析】主要是八进制、十进制和十六进制。对c来说是%o%d,%x;对c++来说是oct,dec,hex。作者感觉所谓的指定格式是输入输出流,sstream的stringstream类是字符串流,本质上应该是差不多的,就写在了一起。学的不深,没有看标准库中类的源代码,请大神指点。

4.二、八、十六之间的转换

【分析】表格里面的一位换四,三位一组之类的是指通过二进制。例如,二进制与八进制进行转换,二进制的110就是八进制的6。反过来,八进制转为二进制,只需要一位转换为三位,6换为110即可。由于也不多,大家都很熟悉,没必要用除留余数法,可以自己写个映射之类的。至于八进制与十六进制的转换,可以利用二进制或十进制作为跳板。(这个代码里面没有,读者可以尝试写一下)

5.全部代码

/*
Project: 进制转换(Radix)
Date:    2019/02/24
Author:  Frank Yu
基本操作函数:
Atoi(string &S, int R) 任意进制转十进制(All Radix to Int) 参数:任意进制字符串 进制R 作用:利用按权展开加和,返回十进制
Itoa(int Num,int R) 十进制转任意进制(Int to All Radix)参数:十进制数Num,进制R 作用:利用除留余数法,返回逆序的余数,即返回所要转换的进制数
功能实现函数:
ToAll() 十进制转任意进制 调用函数Itoa
ToDecimal(string &S) 任意进制转十进制函数 调用Atoi函数,strtol函数
ZhiDing() 作用:利用std的hex dec 以及 bitset,c语言的%o,%x
Stream() 作用:利用sstream头文件将数按某进制读入流,输出流
*/
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<string>
#include<set>
#include<list>
#include<vector>
#include<map>
#include<iterator>
#include<algorithm>
#include<bitset>
#include<sstream>
#include<iostream>
using namespace std;
#define Max 100
//进制权值
int power(int R,int turn)
{
	int ans = 1;
	while (turn--)
	{
		ans = ans*R;
	}
	return ans;
}
//**************************************基本操作函数**********************************//
//任意进制转十进制(All Radix to Int) 参数:任意进制字符串 进制R 作用:利用按权展开加和,返回十进制
long int Atoi(string &S, int R)
{
	long int ans = 0;
	for (int i=0;i < S.size();i++)//按权展开
	{
		ans += (S[i] - '0') * power(R, S.size() - i - 1);
	}
	/* 网上代码 不理解(已了解,举例,十六进制时t可能为f,那么f-'a'=5,再加10就是15了)	
	int ans=0;
	for (int i = 0;i<s.size();i++)
	{
		char t = s[i];
		if (t >= '0'&&t <= '9') ans = ans*radix + t - '0';
		else ans = ans*radix + t - 'a' + 10;
	}*/
	return ans;
}
//十进制转任意进制(Int to All Radix)参数:十进制数Num,进制R 作用:利用除留余数法,返回逆序的余数,即返回所要转换的进制数
string Itoa(int Num,int R)
{
  string remain="";
  int temp;
  do {
   temp = Num%R;//取余
   Num /= R;
   if (temp >= 10)
	   remain += temp - 10 + 'A';//任意进制为大于基数大于10的进制 例如,十六进制
   else remain += temp + '0';
  } while (Num);
  reverse(remain.begin(),remain.end());//逆序
  return remain;
}
//**************************************功能实现函数**********************************//
//菜单
void menu()
{
	cout << "************1.十进制转任意进制(除留余数)       2.任意进制转为十进制(按权展开)****" << endl;
	cout << "************3.十进制指定格式输出(二、八、十六)  4.利用流****************************" << endl;
	cout << "************5.退出" << endl;
}
void menu1()
{
	cout << "************1.十进制转二进制         2.十进制转八进制****" << endl;
	cout << "************3.十进制转十六进制       4.退出**************" << endl;
}
void menu2()
{
	cout << "************1.十进制转八进制         2.十进制转十六进制**************" << endl;
	cout << "************3.八进制转十进制         4.十六进制转十进制**************" << endl;
	cout << "************5.退出" << endl;
}
//十进制转任意进制 调用函数Itoa,自带的itoa
void ToAll()
{
	int num, R;char str[Max];
	cout << "请输入数和进制:" << endl;
	cin >> num >> R;
	cout << num << "转换为"<<R<<"进制为:" << Itoa(num,R) << endl;
	cout << "利用itoa函数:" <<itoa(num,str,R)<<endl;
}
//任意进制转十进制函数 调用Atoi函数,strtol函数
void ToDecimal(string &S)
{
	int R;
	cout << "请输入数和进制:" << endl;
	cin >>S>>R;
	cout <<S<<"转换为十进制为:"<<Atoi(S, R)<<endl;
	//利用strtol函数 long int strtol(const char *nptr,char **endptr,int base)
	//参数,字符串,非法字符指针,字符串中的进制
	char nptr[Max],*stop;
	strcpy(nptr,S.c_str());//string类型转换为char
	cout<<S << "转换为十进制为(利用strtol函数):" << strtol(nptr,&stop,R) << endl;
}
//作用:利用std的hex dec 以及 bitset,c语言的%o,%x
void ZhiDing()
{
	int num;int choice = 0;
	 cout << "请输入十进制数:" << endl;
	 cin >> num;
	while (1)
	{
		menu1();
		printf("请输入菜单序号:\n");
		scanf("%d", &choice);
		if (4 == choice) break;
		switch (choice)
		{
		case 1:cout << num <<"转为二进制(利用bitset):"<<bitset<8>(num)<<endl;break;
		case 2: {
			      cout << num << "转为八进制(利用oct):" << oct << num << endl;
				  printf("转为八进制(利用o):%o\n",num);//8位,高位补0
		         }break;
		case 3: {
			       cout << num << "转为十六进制:" << hex << num << endl;
				   printf("转为十六进制(利用x):%x\n", num);
		        }break;
		default:printf("输入错误!!!\n");break;
		}
	}
}
//作用:利用sstream头文件将数按某进制读入流,输出流
void Stream()
{
	string s;int choice = 0;
	stringstream ss;int num;
	while (1)
	{
		menu2();
		printf("请输入菜单序号:\n");
		scanf("%d", &choice);
		if (5 == choice) break;
		switch (choice)
		{
		case 1: {
			cout << "请输入一个数:" << endl;
			cin >> num;
			ss.clear();//清空一下,防止出错
			ss << oct << num;//十进制转为八进制读入流中
			ss >> s;//转换的八进制数放入字符串s中
			cout << num << "转为八进制(利用流):" << s << endl;
		}break;
		case 2: {
			cout << "请输入一个数:" << endl;
			cin >> num;
			ss.clear();//清空一下,防止出错
			ss << hex << num;//十进制转为十六进制读入流中
			ss >> s;//转换的十六进制数放入字符串s中
			cout << num << "转为十六进制(利用流):" << s << endl;
		}break;
		case 3: {
			cout << "请输入一个数:" << endl;
			cin >> s;
			ss.clear();//清空一下,防止出错
			ss << oct << s;//将s以八进制形式读入流中
			ss >> num;//以十进制输入到num中
			cout << s << "转为十进制(利用流):" << num << endl;
		}break;
		case 4: {
			cout << "请输入一个数:" << endl;
			cin >> s;
			ss.clear();//清空一下,防止出错
			ss << hex << s;//将s以八进制形式读入流中
			ss >> num;//以十进制输入到num中
			cout << s << "转为十进制(利用流):" << num << endl;
		}break;
		default:printf("输入错误!!!\n");break;
		}
	}
}
//主函数
int main()
{
	int choice = 0;
	string S;
	while (1)
	{
		menu();
		printf("请输入菜单序号:\n");
		scanf("%d", &choice);
		if (5 == choice) break;
		switch (choice)
		{
		case 1:ToAll();break;
		case 2:ToDecimal(S);break;
		case 3:ZhiDing();break;
		case 4:Stream();break;
		default:printf("输入错误!!!\n");break;
		}
	}
	return 0;
}

更多数据结构与算法实现:数据结构(严蔚敏版)与算法的实现(含全部代码)

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c/c++进制转换方法汇总(含全部代码) 的相关文章

  • 格式说明符%02x

    我有一个简单的程序 include
  • 静态构造函数和 BeforeFieldInit?

    如果类型没有静态构造函数 则将执行字段初始值设定项 就在使用该类型之前 或者在某个时间点突发奇想 运行时 为什么这段代码 void Main start Dump Test EchoAndReturn Hello end Dump clas
  • 如何使用 openSSL 函数验证 PEM 证书的密钥长度

    如何验证以这种方式生成的 PEM 证书的密钥长度 openssl genrsa des3 out server key 1024 openssl req new key server key out server csr cp server
  • 为什么 C 程序使用 Scanf 给出奇怪的输出?

    我目前正在学习 C 编程 并且遇到了这个奇怪的输出 Program will try functionalities of the scanf function include
  • 在 C++ 代码中转换字符串

    我正在学习 C 并开发一个项目来练习 但现在我想在代码中转换一个变量 字符串 就像这样 用户有一个包含 C 代码的文件 但我希望我的程序读取该文件并插入将其写入代码中 如下所示 include
  • 防止控制台应用程序中的内存工作集最小化?

    我想防止控制台应用程序中的内存工作集最小化 在Windows应用程序中 我可以这样做覆盖 SC MINIMIZE 消息 http support microsoft com kb 293215 en us fr 1 但是 如何在控制台应用程
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • Makefile 和 .Mak 文件 + CodeBlocks 和 VStudio

    我对整个 makefile 概念有点陌生 所以我对此有一些疑问 我正在 Linux 中使用 CodeBlocks 创建一个项目 我使用一个名为 cbp2mak 的工具从 CodeBlocks 项目创建一个 make 文件 如果有人知道更好的
  • Unity手游触摸动作不扎实

    我的代码中有一种 错误 我只是找不到它发生的原因以及如何修复它 我是统一的初学者 甚至是统一的手机游戏的初学者 我使用触摸让玩家从一侧移动到另一侧 但问题是我希望玩家在手指从一侧滑动到另一侧时能够平滑移动 但我的代码还会将玩家移动到您点击的
  • Libev,如何将参数传递给相关回调

    我陷入了 libev 中争论的境地 通常 libev 在类似的函数中接收包 接收回调 没关系 但是实际操作中 我们需要派遣一个亲戚 写回调 根据收到的包裹处理具体工作 例如 S RECV MSG pstRecvMsg S RECV MSG
  • Linux 上的 RTLD_LOCAL 和dynamic_cast

    我们有一个由应用程序中的一些共享库构成的插件 我们需要在应用程序运行时更新它 出于性能原因 我们在卸载旧插件之前加载并开始使用新插件 并且只有当所有线程都使用旧插件完成后 我们才卸载它 由于新插件和旧插件的库具有相同的符号 我们dlopen
  • 来自嵌入图像的 BitmapSource

    我的目标是在 WPF 窗口上重写 OnRender 方法中绘制图像 someImage png 它是嵌入资源 protected override void OnRender System Windows Media DrawingCont
  • 条件类型定义

    如果我有一小段这样的代码 template
  • 如何防止 Blazor NavLink 组件的默认导航

    从 Blazor 3 1 Preview 2 开始 应该可以防止默认导航行为 https devblogs microsoft com aspnet asp net core updates in net core 3 1 preview
  • 如何从 Boost.PropertyTree 复制子树

    我有一些boost property tree ptree 我需要树来删除一些具有特定标签名称的元素 例如 xml 表示源ptree如下
  • SQLAPI++ 的免费替代品? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何免费 也许是开源 的替代品SQLAPI http www sqlapi com 这个库看起来
  • 使用 gcc 时在头文件中查找定义的好方法是什么?

    在使用 gcc 时 有人有推荐的方法在头文件中查找定义吗 使用 MSVC 时 我只需右键单击并选择 转到定义 这非常好 我使用过 netbeans gcc 它确实有代码帮助 包括到定义的超链接 所以这是一种选择 但是 我想知道是否有任何其他
  • 调用 .ToArray() 时出现 ArgumentException

    我有一个经常被清除的列表 代码完全是这样的 VisitorAgent toPersist List
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 嵌入式linux编写AT命令

    我在向 GSM 模块写入 AT 命令时遇到问题 当我使用 minicom b 115200 D dev ttySP0 term vt100 时它工作完美 但我不知道如何在 C 代码中做同样的事情 我没有收到任何错误 但模块对命令没有反应 有

随机推荐

  • 分类方法归结为哪几种类型

    从使用技术上来分 可以分为四种类型 基于距离的分类方法 决策树分类方法 贝叶斯分类方法和规则归纳方法 基于距离的分类方法主要有最邻近方法 决策树方法有ID3 C4 5 VFDT等 贝叶斯方法包括朴素贝叶斯方法和EM算法 规则归纳方法包括AQ
  • 比较两个list是否相等

    比较两个list是否相等 public booelan equalsList List
  • spring-cloud-alibaba 0基础环境 从0开始搭建(最详细)

    这次用到的spring组件nacos fegin gateway 完全适合生产开发 1 所用版本 1 准备 springcloud alibaba 2021 0 4 2 springboot 2 7 2 release 3 springcl
  • 明明启动了三个DataNode,hadoop集群只显示一个datanode监控呢

    在虚拟机里用jps查看到了三个DataNode进程但是在9870页面的DataNode监控下只显示一个DataNode 这是为什么 jps进程 9870的DataNode information 查阅资料 在这个hadoop目录下有一个 o
  • 各版本SQL Server 通过JDBC连接的URL

    最新JDBC驱动下载地址 JDBC driver 6 4 for SQL Server 由图中可以看出 最低仅支持JRE7和SQL Server 2008 需要其他版本请自行查找 1 SQL SERVER 2000 JDBC驱动程序 msb
  • (ECCV 2022) Dense Teacher

    DenseTeacher Dense Pseudo Label for Semi supervised Object Detection https github com Megvii BaseDetection DenseTeacher
  • vscode 禁止自动排序 C++ 头文件

    vscode 禁止自动排序 C 头文件 对 C 头文件排序大部分时间是好的 但是在少数情况下 如果头文件之间的相互依赖关系没有解决 那么对头文件排序就会出现问题 原本能够编译通过的文件 经过自动排序头文件后边的不能编译了 取消自动排序头文件
  • PE 文件结构解析

    PE 文件格式由一个线性的数据流组成 由一个DOS 头开始 接着是一个PE 文件头 这些之后是所偶的区块部 包含重分配信息 符号表信息以及字符串表数据 PE 文件结构 如下图所示 文件被划分为四大部分 包含 DOS 部分 PE 文件头 节表
  • 2018年python基础面试题总结(持续更新)

    duoniu cm 1 写一个冒泡排序 def Bubblesort list for i in range 0 len list 1 for j in range 0 len list 1 i list j gt list j 1 lis
  • 软件建模分析与设计 学习日志(2)用例图 Use Case

    1 用例图的基本概念 定义 由Actor 参与者 Use Case 用例 和其间的关系构成的用于描述系统功能的动态视图 主要作用 描述Actor与Use Case之间的关系 帮助开放人员可视化地了解系统的功能 所以用例图是需求分析中的产物
  • spring boot 配置文件

    目录 配置文件作用 配置文件的分类 配置文件格式 properties properties配置文件基本语法 读取单个的配置文件 properties 缺点 yml 特点 基本语法 yml单双引号 yml对象配置读取 yml中集合的读与写
  • LDO基础知识 - 噪声来源以及解决方案

    在一篇LDO基础知识博文中 我讨论了使用低压差稳压器 LDO 过滤因开关模式电源导致的纹波电压 然而 这不是获得净化直流电源唯一要考虑的事情 因为LDO是电子设备 它们自身也会生成一定数量的噪声 选择使用低噪声LDO和采取步骤减少内部噪声
  • webpack打包font时的路径问题

    使用Webpack打包Build时 对于 woff woff2 eot ttf otf 这些类型的font文件路径有问题 一般常见的错误路径就是 static css static css fonts 出现这样的问题 大多数就是配置上的问题
  • jupyter notebook运行没反应_配置服务器上Jupyter

    由于本人最近由于一些事情 总是不能有大块时间打代码 但是有时候一些灵感又需要写一些小品级的代码来记录一下 所以我决定采用 阿里云服务器 jupyter notebook iPad 的方案解决我的问题 原因如下 云服务器可以一直运行 让代码慢
  • dual microphone wind noise reduction

    coherence weighting use magnitude squared coherence MSC supression gain limit gain function coherence based wind noise e
  • 报错: DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80070003 ()

    参考了网上的种种建议 说一下自己是怎么解决的 测试代码 音频播放列表 QMediaPlaylist mdPlayList mdPlayList new QMediaPlaylist this 注意这里使用QUrl fromLocalFile
  • Qt中的QString和QStringList常用方法

    QString定义 QString s1 abc QString s2 hello 字符串连接 QString s s1 s2 组包 s QString a 1 b 2 c 3 arg 250 arg hello arg 22 22 qDe
  • LTspice使用笔记 week3 进行.ac仿真查看相频 幅频特性 构建震荡器

    RC电路 查看相频 幅频特性 使用 ac命令可以容易 清晰地看出相频 幅频特性 ac命令的使用需要在激励源上加入一个小的ac信号 通常为1 然后进行 ac仿真即可 ac仿真的命令可以参考博主的设置 构建正弦振荡 不加入二极管 分析 只有电路
  • 运营人常备的8个营销模型一、SWOT分析二、PEST分析三、3C

    运营人常备的8个营销模型 一 SWOT分析 二 PEST分析 三 3C战略模型 四 STP理论 五 波特五力模型 六 波士顿矩阵 七 GE矩阵 八 商业模式画布 内容如下 一 SWOT分析 1 strengths是优势 2 weakness
  • c/c++进制转换方法汇总(含全部代码)

    进制转换方法汇总表 原进制 转换进制 方法1 方法2 方法3 方法4 十进制 二进制 bitset指定格式输出 除留余数法 itoa 十进制 八进制 oct o指定格式输出 流 除留余数法 itoa 十进制 十六进制 hex x指定格式输出