Могу ли я убедить оператор >> в C++ читать как шестнадцатеричное значение И, так и десятичное значение? Следующая программа демонстрирует, как происходит неправильное чтение шестнадцатеричного кода. Я бы хотел, чтобы один и тот же istringstream мог читать как шестнадцатеричные, так и десятичные числа.
#include <iostream>
#include <sstream>
int main(int argc, char** argv)
{
int result = 0;
// std::istringstream is("5"); // this works
std::istringstream is("0x5"); // this fails
while ( is.good() ) {
if ( is.peek() != EOF )
is >> result;
else
break;
}
if ( is.fail() )
std::cout << "failed to read string" << std::endl;
else
std::cout << "successfully read string" << std::endl;
std::cout << "result: " << result << std::endl;
}





Вам нужно сообщить C++, какой будет ваша база.
Хотите разобрать шестнадцатеричное число? Измените строку «is >> result» на:
is >> std::hex >> result;
Ввод std :: dec указывает десятичные числа, std :: oct указывает восьмеричное.
0x - это префикс, специфичный для C / C++. Шестнадцатеричное число - это просто цифры, подобные десятичному. Вам нужно будет проверить наличие этих символов, а затем проанализировать их соответствующим образом.