diff --git a/autotest/HexAtoi/Etalon.log b/autotest/HexAtoi/Etalon.log new file mode 100644 index 000000000..55016f910 --- /dev/null +++ b/autotest/HexAtoi/Etalon.log @@ -0,0 +1,27 @@ +* C:\upp\out\autotest\CLANGx64.Debug.Debug_Full\HexAtoi.exe 22.05.2023 09:24:04, user: cxl + +s = 1; +CParser(s).ReadNumber(2) = 1 +CParser(s).ReadNumber(8) = 1 +CParser(s).ReadNumber(10) = 1 +CParser(s).ReadNumber(16) = 1 +s = 9; +CParser(s).ReadNumber(2) = Error +CParser(s).ReadNumber(8) = Error +CParser(s).ReadNumber(10) = 9 +CParser(s).ReadNumber(16) = 9 +s = a; +CParser(s).ReadNumber(2) = Error +CParser(s).ReadNumber(8) = Error +CParser(s).ReadNumber(10) = Error +CParser(s).ReadNumber(16) = 10 +s = f; +CParser(s).ReadNumber(2) = Error +CParser(s).ReadNumber(8) = Error +CParser(s).ReadNumber(10) = Error +CParser(s).ReadNumber(16) = 15 +s = a0; +CParser(s).ReadNumber(2) = Error +CParser(s).ReadNumber(8) = Error +CParser(s).ReadNumber(10) = Error +CParser(s).ReadNumber(16) = 160 diff --git a/autotest/HexAtoi/HexAtoi.cpp b/autotest/HexAtoi/HexAtoi.cpp new file mode 100644 index 000000000..439884b8c --- /dev/null +++ b/autotest/HexAtoi/HexAtoi.cpp @@ -0,0 +1,18 @@ +#include + +using namespace Upp; + +CONSOLE_APP_MAIN +{ + StdLogSetup(LOG_COUT|LOG_FILE); + + for(String s : { "1;", "9;", "a;", "f;", "a0;" }) { + DDUMP(s); + try { DDUMP(CParser(s).ReadNumber(2)); } catch(CParser::Error) { LOG("Error"); } + try { DDUMP(CParser(s).ReadNumber(8)); } catch(CParser::Error) { LOG("Error"); } + try { DDUMP(CParser(s).ReadNumber(10)); } catch(CParser::Error) { LOG("Error"); } + try { DDUMP(CParser(s).ReadNumber(16)); } catch(CParser::Error) { LOG("Error"); } + } + + CheckLogEtalon(); +} diff --git a/autotest/HexAtoi/HexAtoi.upp b/autotest/HexAtoi/HexAtoi.upp new file mode 100644 index 000000000..520b3d554 --- /dev/null +++ b/autotest/HexAtoi/HexAtoi.upp @@ -0,0 +1,10 @@ +uses + Core; + +file + Etalon.log, + HexAtoi.cpp; + +mainconfig + "" = ""; + diff --git a/uppsrc/Core/Convert.hpp b/uppsrc/Core/Convert.hpp index ba294a72e..13687d16e 100644 --- a/uppsrc/Core/Convert.hpp +++ b/uppsrc/Core/Convert.hpp @@ -29,9 +29,11 @@ const CHAR *ScanUint0(UINT& result, const CHAR *s, bool& overflow) if(base > 10) { if(c <= '9') return c - '0'; - if(c <= 'Z') + if(c >= 'A' && c <= 'Z') return c - 'A' + 10; - return c - 'a' + 10; + if(c >= 'a' && c <= 'z') + return c - 'a' + 10; + return -1; } return c - '0'; };