c++如何实现进制转换
时间: 2024-12-24 12:40:08 浏览: 0
在C++中,可以使用内置的字符串处理函数和位操作来实现数字之间的进制转换。以下是几种常见的进制转换方法:
### 从十进制到其他进制(例如二进制、八进制、十六进制)
1. **转换为二进制**:
```cpp
int decimal_num = 10; // 十进制数
ostringstream oss;
oss << std::bitset<8>(decimal_num); // 8代表最大宽度,不足填充0
string binary_str = oss.str();
```
2. **转换为八进制**:
```cpp
int decimal_num = 255; // 十进制数
std::ostringstream oss;
oss << std::oct << decimal_num;
string octal_str = oss.str();
```
3. **转换为十六进制**:
```cpp
int decimal_num = 255; // 十进制数
std::ostringstream oss;
oss << std::hex << decimal_num;
string hex_str = oss.str();
```
### 从其他进制到十进制
1. **从字符串解析到十进制**:
```cpp
string binary_str = "1010"; // 二进制字符串
int decimal_num = stoi(binary_str, nullptr, 2); // 第三个参数为基数,这里是2
```
### 自定义函数实现任意进制转换
你可以编写自定义函数,通过循环和位运算来实现。这里给出一个通用的函数例子:
```cpp
template <typename T, typename U>
T convertToDecimal(const U& number, int base) {
T result = 0;
bool negative = false;
if (number[0] == '-') {
negative = true;
number.erase(0, 1);
}
for (auto it : number) {
char digit = toupper(it) - '0'; // 转换字符到对应的数字
if (digit >= base) {
throw std::invalid_argument("Invalid digit in the given base");
}
result *= base;
result += static_cast<T>(digit);
}
return negative ? -result : result;
}
// 示例:
string binary_string = "1010";
int decimal_num = convertToDecimal<int>(binary_string, 2);
```
记得在使用这些方法时处理边界情况和异常,如输入非法字符或超出范围等。
阅读全文