C++的进制转换

本文详细介绍了C++中如何进行进制转换,包括从其他进制转为十进制,以及从十进制转为任意进制。通过基础框架、代码实现和完整示例,阐述了转换过程中的关键步骤和逻辑,适合C++初学者和进制转换需求者学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

目录

1.前言

2.了解进制

3.转成十进制

3.0基础框架

3.1代码部分

3.2所有代码

4.转成N进制

4.0基础框架

4.1代码部分

4.2所有代码

5.终极任务


1.前言

在计算机中任何数据图片都会转成二进制的形式,二进制是由一和零组成的,比如:101、10

所以我们通常会使用二进制。当然还有8进制、16进制和我们最熟悉的十进制,在这篇文章里我们学习这些进制的转换,认识这些进制。

2.了解进制

几进制 有什么数组成的
2 1 0
8 0 1 2 3 4 5 6 7
10 0 1 2 3 4 5 6 7 8 9
16

0 1 2 3 4 5 6 7 8 9

A B C D E F

其实N进制,就是由0~n-1组成的.

如果零到九表示不了的话,就借用一下字母.

3.转成十进制

一个很简单的方法把n进制的数字转换成十进制的数字

先用二进制举例:100

用我们的方法就是: 0 * ^{^{^{^{^{}}}}}^{^{^{}}} + 0 *  + 1 *  = 4

n进制就是n的次方.

我们就可以把N进制的数看成一个字符数组num

用我们举例的二进制,来写的话就是:

num[2] * pow(2,0) + num[1] * pow(2,1) + num[0] * pow(2,2)//pow是cmath库的,

但是你也不知道这个数有多少位,就可以使用循环,循环到strlen(num).

但是我们会遇

### C++ 进制转换方法及代码示例 #### 使用字符串流 `stringstream` 实现进制转换C++ 中,可以利用 `<sstream>` 库中的 `stringstream` 类来方便地完成不同进制之间的转换。下面是一个完整的例子,展示了如何将十进制数分别转换成二进制、八进制和十六进制。 ```cpp #include <iostream> #include <sstream> using namespace std; int main() { int decimal; cout << "请输入一个十进制整数:" << endl; cin >> decimal; stringstream ss; // 转换为二进制 ss.clear(); ss << dec << showbase << internal << bitset<32>(decimal); string binary = ss.str().substr(2); // 去掉前缀 '0b' cout << "二进制表示:" << binary << endl; // 转换为八进制 ss.clear(); ss << oct << decimal; cout << "八进制表示:" << ss.str() << endl; // 转换为十六进制 ss.clear(); ss << hex << uppercase << decimal; cout << "十六进制表示:" << ss.str() << endl; return 0; } ``` 这段代码首先定义了一个 `stringstream` 对象用于存储临时数据,在每次执行新的转换之前都调用了 `clear()` 方法重置其状态[^1]。 对于更复杂的场景比如从其他进制转回十进制,则可以通过读取输入并逐位处理的方式来实现: ```cpp #include <iostream> #include <cmath> using namespace std; // 将任意基数的字符串转化为十进制数值 long long convertToDecimal(const string& numStr, int base) { long long result = 0; for (size_t i = 0; i < numStr.size(); ++i){ char ch = tolower(numStr[numStr.size()-1-i]); int digitValue = isdigit(ch)?ch-'0':ch-'a'+10; if(digitValue >= base || digitValue < 0)return -1; result += pow(base,i)*digitValue; } return result; } int main(){ string inputNum; int base; cout<<"请输入要转化的数字及其对应的基底(如'1A 16' 表示16进制下的1A):"<<endl; cin>>inputNum>>base; cout<<convertToDecimal(inputNum,base)<<endl; return 0; } ``` 此函数接受两个参数——待转换的字符串形式的数字以及原始进制,并返回相应的十进制值。注意这里假设合法的字符集是从 `'0'~'9', 'a'~'f'` 或者大写的 `'A'~'F'` 。如果遇到非法字符则立即停止计算并返回错误标志 `-1` [^3].
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值