C++代码实现将两位有符号十六进制整型转成有符号的十进制整型数。例如:FF = -1,10 = 16.
时间: 2024-09-29 07:06:51 浏览: 31
在C++中,你可以使用标准库中的`std::stoi`函数或者手动进行转换。由于十六进制数可能会包含负号(前缀“0x”表示正数,“0X”表示大写字母形式的正数,“-”表示负数),所以首先需要处理负号的情况。以下是一个简单的示例:
```cpp
#include <iostream>
#include <sstream>
// 如果十六进制字符串是以 "0x" 或 "0X" 开头,去掉前缀
bool isHexPrefixed(const std::string& hexStr) {
return (hexStr.substr(0, 2) == "0x" || hexStr.substr(0, 2) == "0X");
}
int hexToDecimal(const std::string& hexStr) {
// 处理负号
bool isNegative = false;
if (hexStr[0] == '-') {
isNegative = true;
hexStr.erase(0, 1);
} else if (isHexPrefixed(hexStr)) {
hexStr.erase(0, 2);
}
int decimal = 0;
for (size_t i = 0; i < hexStr.length(); ++i) {
char digit = hexStr[i];
// 检查字符是否是有效的十六进制数字
if (isdigit(digit)) {
decimal = decimal * 16 + digit - '0';
} else if ('a' <= digit && digit <= 'f') { // 小写十六进制
decimal = decimal * 16 + digit - 'a' + 10;
} else if ('A' <= digit && digit <= 'F') { // 大写十六进制
decimal = decimal * 16 + digit - 'A' + 10;
} else {
throw std::invalid_argument("Invalid hexadecimal character");
}
}
// 返回负数结果如果原始字符串是负的
return isNegative ? -decimal : decimal;
}
int main() {
std::string hex = "FF";
try {
int decimalValue = hexToDecimal(hex);
std::cout << "Hexadecimal " << hex << " equals to decimal " << decimalValue << std::endl;
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
```
这个程序会把十六进制字符串"FF"转换成对应的十进制数值-1。
阅读全文