C++代码实现将两位带符号十六进制数转成带符号的十进制数。
时间: 2024-09-29 15:03:07 浏览: 21
在C++中,你可以通过标准库函数`std::stoi()`或者自定义算法将十六进制字符串转换为十进制整数。但是,如果你需要处理带符号的情况,你需要先判断十六进制字符串的第一个字符是否是"+"或"-"表示正负,然后处理剩余的十六进制部分。
下面是一个简单的示例代码:
```cpp
#include <iostream>
#include <string>
int hexToDecimalSigned(const std::string& hexStr) {
int sign = (hexStr[0] == '+' || hexStr[0] == '-') ? (hexStr[0] == '-' ? -1 : 1) : 1; // 确定正负号
hexStr.erase(0, 1); // 移除符号
long decimal = 0;
for (size_t i = 0; i < hexStr.length(); ++i) {
if (hexStr[i] >= '0' && hexStr[i] <= '9') {
decimal += static_cast<int>(hexStr[i] - '0') * pow(16, hexStr.length() - 1 - i);
} else if (hexStr[i] >= 'a' && hexStr[i] <= 'f') {
decimal += static_cast<int>(hexStr[i] - 'a' + 10) * pow(16, hexStr.length() - 1 - i);
} else if (hexStr[i] >= 'A' && hexStr[i] <= 'F') {
decimal += static_cast<int>(hexStr[i] - 'A' + 10) * pow(16, hexStr.length() - 1 - i);
} else {
throw std::invalid_argument("Invalid hexadecimal character");
}
}
return decimal * sign;
}
int main() {
std::string hexNum = "-ff"; // 示例输入,带符号十六进制
try {
int decimalNum = hexToDecimalSigned(hexNum);
std::cout << "Hexadecimal " << hexNum << " in decimal is: " << decimalNum << std::endl;
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```