| // Common/StringToInt.cpp |
| |
| #include "StdAfx.h" |
| |
| #include "StringToInt.h" |
| |
| UInt64 ConvertStringToUInt64(const char *s, const char **end) |
| { |
| UInt64 result = 0; |
| for (;;) |
| { |
| char c = *s; |
| if (c < '0' || c > '9') |
| { |
| if (end != NULL) |
| *end = s; |
| return result; |
| } |
| result *= 10; |
| result += (c - '0'); |
| s++; |
| } |
| } |
| |
| UInt64 ConvertOctStringToUInt64(const char *s, const char **end) |
| { |
| UInt64 result = 0; |
| for (;;) |
| { |
| char c = *s; |
| if (c < '0' || c > '7') |
| { |
| if (end != NULL) |
| *end = s; |
| return result; |
| } |
| result <<= 3; |
| result += (c - '0'); |
| s++; |
| } |
| } |
| |
| UInt64 ConvertHexStringToUInt64(const char *s, const char **end) |
| { |
| UInt64 result = 0; |
| for (;;) |
| { |
| char c = *s; |
| UInt32 v; |
| if (c >= '0' && c <= '9') v = (c - '0'); |
| else if (c >= 'A' && c <= 'F') v = 10 + (c - 'A'); |
| else if (c >= 'a' && c <= 'f') v = 10 + (c - 'a'); |
| else |
| { |
| if (end != NULL) |
| *end = s; |
| return result; |
| } |
| result <<= 4; |
| result |= v; |
| s++; |
| } |
| } |
| |
| |
| UInt64 ConvertStringToUInt64(const wchar_t *s, const wchar_t **end) |
| { |
| UInt64 result = 0; |
| for (;;) |
| { |
| wchar_t c = *s; |
| if (c < '0' || c > '9') |
| { |
| if (end != NULL) |
| *end = s; |
| return result; |
| } |
| result *= 10; |
| result += (c - '0'); |
| s++; |
| } |
| } |
| |
| |
| Int64 ConvertStringToInt64(const char *s, const char **end) |
| { |
| if (*s == '-') |
| return -(Int64)ConvertStringToUInt64(s + 1, end); |
| return ConvertStringToUInt64(s, end); |
| } |