c++各进制转换
时间: 2025-05-22 20:37:44 浏览: 15
### C++ 中不同进制之间的转换方法
#### 使用 `stringstream` 实现进制转换
通过使用标准库中的 `std::stringstream` 类,可以方便地完成各种进制间的相互转换。例如,可以通过设置输入/输出流的格式标志来指定数据是以何种进制形式读取或写入。
```cpp
#include <iostream>
#include <sstream>
int main() {
std::stringstream ss;
int decimal;
// 十进制转二进制
ss << std::hex << 255; // 输入十六进制数值
ss >> decimal; // 转换为十进制
ss.clear(); // 清除状态以便重用 stringstream 对象
ss.str(""); // 清空缓冲区内容
// 输出结果
std::cout << "Decimal: " << decimal << "\n";
return 0;
}
```
上述代码展示了如何利用 `std::stringstream` 和其成员函数 `str()` 来清空内部缓存以及重新初始化对象的状态[^1]。
#### 利用 `stoi` 函数实现 n 进制到十进制的转换
对于已知基数的情况(如二进制、八进制或者十六进制),可以直接调用 `std::stoi` 方法并传递第二个参数作为基数指示器来进行相应的转换操作。
```cpp
#include <iostream>
#include <string>
int main(){
const char* binaryStr = "1111";
int baseTwoValue = std::stoi(binaryStr, nullptr, 2);
const char* octalStr = "FF";
int baseEightValue = std::stoi(octalStr, nullptr, 8);
const char* hexaStr = "7F";
int baseSixteenValue = std::stoi(hexaStr, nullptr, 16);
std::cout << "Binary String \"" << binaryStr << "\" converted to Decimal is : " << baseTwoValue << '\n';
std::cout << "Octal String \"" << octalStr << "\" converted to Decimal is : " << baseEightValue << '\n';
std::cout << "Hexadecimal String \""<< hexaStr << "\"converted to Decimal is :" <<baseSixteenValue<<'\n';
return 0;
}
```
这里分别演示了从字符串表示的不同进制数向整型变量赋值的过程。
#### 应用 `bitset` 处理固定长度位模式的数据结构
当涉及到更底层的操作时,比如处理单个比特位,则推荐采用 STL 提供的模板类 `std::bitset<N>` ,其中 N 表示该 bitset 的大小即它能容纳多少个布尔类型的元素(也就是bit) 。此容器支持多种运算符重载(+,-,&|^~等等),并且提供了许多实用的方法用于查询和修改特定位置上的值。
```cpp
#include <iostream>
#include <bitset>
using namespace std ;
int main () {
unsigned long num=9 ;//定义一个无符号长整形数字9
cout<<"The number "<<num<<" has following bits set :";
for(int i=(sizeof(unsigned long)*8)-1;i>=0;i--){
if((num&(1UL<<i))!=0){
cout<<i<<" ";
}
}
cout<<"\nUsing Bitset:\nThe Number:"<<num<<"\nis represented as follows :\n"<<bitset<32>(num)<<endl ;
return 0;
}
```
上面的例子说明了怎样借助于循环语句手动提取每一位的信息;同时也给出了另一种更为简洁直观的方式——运用内置的 `std::bitset` 容器自动展示整个序列的所有位情况。
#### 借助 `to_string` 函数简化表达逻辑
如果只是单纯想要获得某个整数对应的各种常见进制下的文本表现形式的话,那么最简单粗暴的办法莫过于直接应用 `std::to_string` 辅助工具啦!
```cpp
#include <iostream>
#include <string>
int main()
{
int value = 255;
std::string strDec = std::to_string(value); // Convert integer into string (decimal by default).
std::string strBin = std::bitset<8>(value).to_string();
std::string strHex = "0x" + std::to_string(std::stoul(strBin.c_str(),nullptr,2));
std::cout << "Integer Value:" << value <<"\n"
<< "String Representation in Decimal Form:" << strDec << "\n"
<< "String Representation in Binary Form using Bitsets:" << strBin << "\n"
<< "String Representation in Hexadecimal Form via conversion from bin back again:" << strHex << "\n";
return 0;
}
```
值得注意的是,在某些情况下可能还需要额外引入头文件 `<cstdlib>` 才能够正常使用部分功能。
阅读全文
相关推荐
















