c++ 进制转换函数
时间: 2024-12-30 18:34:33 浏览: 6
### C++ 中的进制转换
在 C++ 中,可以利用标准库中的多种方法来实现不同数制之间的转换。对于整型数值而言,`std::stoi`, `std::stol`, 和 `std::stoul` 函数可以从字符串表示形式按照指定基数解析成对应的整数类型[^1]。
当需要将整数转换为其他进制下的字符串表达时,则可借助于 `std::to_string()` 或者使用流操作符配合自定义填充字符与宽度设置完成此任务。然而需要注意的是,`std::to_string()` 只支持二进制、八进制以及十六进制到十进制字符串间的直接变换;如果想要获取非十进制的目标格式化输出,应该采用位域操纵器如 `std::oct`, `std::hex` 结合 `std::stringstream` 来达成目的。
下面给出一段简单的代码片段展示如何执行这些基本类型的相互转变:
```cpp
#include <iostream>
#include <string>
#include <sstream>
// Convert integer to string with specified base (binary, octal or hex)
std::string IntToString(int value, int base) {
std::ostringstream oss;
switch(base){
case 2 : oss << "0b" << std::bitset<32>(value).to_string(); break;
case 8 : oss << "0" << std::oct << value; break;
case 16: oss << "0x" << std::hex << value; break;
default: throw std::invalid_argument("Unsupported base");
}
return oss.str();
}
// Parse string representing an integer in given base into actual integer.
int StringToInt(const std::string& str, int base) {
try{
switch(base){
case 2 : return static_cast<int>(std::strtol(str.c_str(), nullptr, 2));
case 8 : return static_cast<int>(std::strtol(str.c_str(), nullptr, 8));
case 10: return static_cast<int>(std::stoi(str));
case 16: return static_cast<int>(std::strtol(str.c_str(), nullptr, 16));
default: throw std::invalid_argument("Unsupported base");
}
} catch(...){throw;}
}
```
阅读全文