diff --git a/autotest/Atoi/Atoi.cpp b/autotest/Atoi/Atoi.cpp index 54c578ef4..4b8a6962d 100644 --- a/autotest/Atoi/Atoi.cpp +++ b/autotest/Atoi/Atoi.cpp @@ -157,5 +157,15 @@ CONSOLE_APP_MAIN DDUMP(CParser("123456123").ReadNumber64(8)); DDUMP(CParser("123456123").ReadNumber64(16)); + DDUMP(Atoi("")); + DDUMP(Atoi("x")); + DDUMP(Atoi("123")); + DDUMP(Atoi("-123")); + + DDUMP(Atoi64("")); + DDUMP(Atoi64("x")); + DDUMP(Atoi64("123")); + DDUMP(Atoi64("-123")); + CheckLogEtalon(); } diff --git a/autotest/Atoi/Etalon.log b/autotest/Atoi/Etalon.log index 7c56b1623..bd6c000ca 100644 --- a/autotest/Atoi/Etalon.log +++ b/autotest/Atoi/Etalon.log @@ -56,3 +56,11 @@ e = (1,1): number is too big CParser("123456123").ReadNumber64() = 123456123 CParser("123456123").ReadNumber64(8) = 21912659 CParser("123456123").ReadNumber64(16) = 591749411 +Atoi("") = 0 +Atoi("x") = 0 +Atoi("123") = 123 +Atoi("-123") = -123 +Atoi64("") = 0 +Atoi64("x") = 0 +Atoi64("123") = 123 +Atoi64("-123") = -123 diff --git a/uppsrc/Core/Convert.cpp b/uppsrc/Core/Convert.cpp index e34e15c27..d229ca548 100644 --- a/uppsrc/Core/Convert.cpp +++ b/uppsrc/Core/Convert.cpp @@ -133,6 +133,13 @@ int ScanInt(const char *ptr) return ScanInt(x, ptr, overflow) && !overflow ? x : Null; } +int Atoi(const char *ptr) +{ + int x; + bool overflow = false; + return ScanInt(x, ptr, overflow) && !overflow ? x : 0; +} + int64 ScanInt64(const char *ptr, const char **endptr) { int64 x; @@ -150,6 +157,13 @@ int64 ScanInt64(const char *ptr) return ScanInt(x, ptr, overflow) && !overflow ? x : Null; } +int64 Atoi64(const char *ptr) +{ + int64 x; + bool overflow = false; + return ScanInt(x, ptr, overflow) && !overflow ? x : 0; +} + Value StrIntValue(const char *s) { if(s && *s) { diff --git a/uppsrc/Core/Convert.h b/uppsrc/Core/Convert.h index d353a3ef3..833490e6f 100644 --- a/uppsrc/Core/Convert.h +++ b/uppsrc/Core/Convert.h @@ -17,6 +17,9 @@ int64 ScanInt64(const char *ptr, const char **endptr, int radix); int64 ScanInt64(const char *ptr, const char **endptr); int64 ScanInt64(const char *ptr); +int Atoi(const char *ptr); +int64 Atoi64(const char *ptr); + double ScanDouble(const char *ptr, const char **endptr, bool accept_comma); double ScanDouble(const wchar *ptr, const wchar **endptr, bool accept_comma); double ScanDouble(const char *ptr, const char **endptr);