c++进制转换
时间: 2025-04-27 13:25:42 浏览: 27
### 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].
阅读全文
相关推荐













