diff --git a/lib/mathlib.cpp b/lib/mathlib.cpp index 6490d398d..c43d239a3 100644 --- a/lib/mathlib.cpp +++ b/lib/mathlib.cpp @@ -31,10 +31,17 @@ MathLib::bigint MathLib::toLongNumber(const std::string &str) { // hexadecimal numbers: if (isHex(str)) { - bigint ret = 0; - std::istringstream istr(str); - istr >> std::hex >> ret; - return ret; + if (str[0] == '-') { + bigint ret = 0; + std::istringstream istr(str); + istr >> std::hex >> ret; + return ret; + } else { + unsigned long long ret = 0; + std::istringstream istr(str); + istr >> std::hex >> ret; + return (bigint)ret; + } } // octal numbers: diff --git a/test/testmathlib.cpp b/test/testmathlib.cpp index f0e2eb994..232b66a81 100644 --- a/test/testmathlib.cpp +++ b/test/testmathlib.cpp @@ -185,6 +185,10 @@ private: ASSERT_EQUALS(100 , MathLib::toLongNumber("+10.0E+1")); ASSERT_EQUALS(-1 , MathLib::toLongNumber("-10.0E-1")); + // from long long + ASSERT_EQUALS(0xFF00000000000000LL, MathLib::toLongNumber("0xFF00000000000000LL")); + ASSERT_EQUALS(0x0A00000000000000LL, MathLib::toLongNumber("0x0A00000000000000LL")); + // ----------------- // to double number: // -----------------