From 4b30fc57624f1b4b438eca24017daaf885ce9b44 Mon Sep 17 00:00:00 2001 From: "dahyeong.kim" Date: Sun, 14 Apr 2013 19:50:30 +0900 Subject: [PATCH] [N_SE-33612] In Decode(), add code to check if str[0] is '+' or '-' Change-Id: Iaa9e9d7763c847cc1d9054de2fb207342d196f01 Signed-off-by: dahyeong.kim --- src/base/FBaseInt8.cpp | 2 +- src/base/FBaseInteger.cpp | 16 ++++++++++++---- src/base/FBaseLong.cpp | 16 ++++++++++++---- src/base/FBaseShort.cpp | 16 ++++++++++++---- 4 files changed, 37 insertions(+), 13 deletions(-) diff --git a/src/base/FBaseInt8.cpp b/src/base/FBaseInt8.cpp index 284df62..40dd62f 100644 --- a/src/base/FBaseInt8.cpp +++ b/src/base/FBaseInt8.cpp @@ -109,7 +109,7 @@ Int8::Decode(const String& s, char& ret) wchar_t* pEnd = null; String str(s); - if (s[0] == L'-') + if (s[0] == L'-' || s[0] == L'+') { startIndex = 1; minLength = 3; diff --git a/src/base/FBaseInteger.cpp b/src/base/FBaseInteger.cpp index 244374c..96563b2 100644 --- a/src/base/FBaseInteger.cpp +++ b/src/base/FBaseInteger.cpp @@ -90,20 +90,28 @@ Integer::Decode(const String& s, int& ret) "[%s] The length of s MUST be greater than 0.", GetErrorMessage(E_NUM_FORMAT)); int radix = 0; + int startIndex = 0; + int minLength = 2; wchar_t* pEnd = null; String str(s); + if (s[0] == L'-' || s[0] == L'+') + { + startIndex = 1; + minLength = 3; + } + // Find radix - if (s[0] == L'#') + if (s[startIndex] == L'#') { radix = Character::RADIX_HEXADECIMAL; // Remove '#' - str.Remove(0, 1); + str.Remove(startIndex, 1); } - else if (s[0] == L'0' && (s.GetLength() >= 2)) + else if (s[startIndex] == L'0' && (s.GetLength() >= minLength)) { - if (s[1] == L'x' || s[1] == L'X') + if (s[startIndex + 1] == L'x' || s[startIndex + 1] == L'X') { radix = Character::RADIX_HEXADECIMAL; } diff --git a/src/base/FBaseLong.cpp b/src/base/FBaseLong.cpp index d349748..b6ed711 100644 --- a/src/base/FBaseLong.cpp +++ b/src/base/FBaseLong.cpp @@ -101,20 +101,28 @@ Long::Decode(const String& s, long& ret) "[%s] The length of s MUST be greater than 0.", GetErrorMessage(E_NUM_FORMAT)); int radix = 0; + int startIndex = 0; + int minLength = 2; wchar_t* pEnd = null; String str(s); + if (s[0] == L'-' || s[0] == L'+') + { + startIndex = 1; + minLength = 3; + } + // Find radix - if (s[0] == L'#') + if (s[startIndex] == L'#') { radix = Character::RADIX_HEXADECIMAL; // Remove '#' - str.Remove(0, 1); + str.Remove(startIndex, 1); } - else if (s[0] == L'0' && (s.GetLength() >= 2)) + else if (s[startIndex] == L'0' && (s.GetLength() >= minLength)) { - if (s[1] == L'x' || s[1] == L'X') + if (s[startIndex + 1] == L'x' || s[startIndex + 1] == L'X') { radix = Character::RADIX_HEXADECIMAL; } diff --git a/src/base/FBaseShort.cpp b/src/base/FBaseShort.cpp index f40452c..18f8fa5 100644 --- a/src/base/FBaseShort.cpp +++ b/src/base/FBaseShort.cpp @@ -108,20 +108,28 @@ Short::Decode(const String& s, short& ret) long value = 0; int radix = 0; + int startIndex = 0; + int minLength = 2; wchar_t* pEnd = null; String str(s); + if (s[0] == L'-' || s[0] == L'+') + { + startIndex = 1; + minLength = 3; + } + // Find radix - if (s[0] == L'#') + if (s[startIndex] == L'#') { radix = Character::RADIX_HEXADECIMAL; // Remove '#' - str.Remove(0, 1); + str.Remove(startIndex, 1); } - else if (s[0] == L'0' && (s.GetLength() >= 2)) + else if (s[startIndex] == L'0' && (s.GetLength() >= minLength)) { - if (s[1] == L'x' || s[1] == L'X') + if (s[startIndex + 1] == L'x' || s[startIndex + 1] == L'X') { radix = Character::RADIX_HEXADECIMAL; } -- 2.7.4