Can I persuade operator>>
in C++ to read both a hex
value AND and a decimal
value? The following program demonstrates how reading hex goes wrong. I'd like the same istringstream
to be able to read both hex
and decimal
.
#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;
}
Use std::setbase(0)
which enables prefix dependent parsing. It will be able to parse 10
(dec) as 10 decimal, 0x10
(hex) as 16 decimal and 010
(octal) as 8 decimal.
#include <iomanip>
is >> std::setbase(0) >> result;
You need to tell C++ what your base is going to be.
Want to parse a hex number? Change your "is >> result" line to:
is >> std::hex >> result;
Putting a std::dec indicates decimal numbers, std::oct indicates octal.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With