NumberParser::parseHex[64](): allow 0x/0X prefix

This commit is contained in:
Guenter Obiltschnig 2015-09-09 14:38:08 +02:00
parent 7a6f54e0f0
commit 622d9d4c6c
2 changed files with 8 additions and 2 deletions

View File

@ -84,7 +84,9 @@ unsigned NumberParser::parseHex(const std::string& s)
bool NumberParser::tryParseHex(const std::string& s, unsigned& value)
{
return strToInt(s.c_str(), value, NUM_BASE_HEX);
int offset = 0;
if (s.size() > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) offset = 2;
return strToInt(s.c_str() + offset, value, NUM_BASE_HEX);
}
@ -151,7 +153,9 @@ UInt64 NumberParser::parseHex64(const std::string& s)
bool NumberParser::tryParseHex64(const std::string& s, UInt64& value)
{
return strToInt(s.c_str(), value, NUM_BASE_HEX);
int offset = 0;
if (s.size() > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'X')) offset = 2;
return strToInt(s.c_str() + offset, value, NUM_BASE_HEX);
}

View File

@ -74,6 +74,8 @@ void NumberParserTest::testParse()
assert(NumberParser::parse("-0123") == -123);
assert(NumberParser::parseUnsigned("123") == 123);
assert(NumberParser::parseHex("12AB") == 0x12ab);
assert(NumberParser::parseHex("0x12AB") == 0x12ab);
assert(NumberParser::parseHex("0X12AB") == 0x12ab);
assert(NumberParser::parseHex("00") == 0);
assert(NumberParser::parseOct("123") == 0123);
assert(NumberParser::parseOct("0123") == 0123);