Home | History | Annotate | Download | only in Common
      1 // Common/StringToInt.cpp
      2 
      3 #include "StdAfx.h"
      4 
      5 #include "StringToInt.h"
      6 
      7 UInt64 ConvertStringToUInt64(const char *s, const char **end)
      8 {
      9   UInt64 result = 0;
     10   for (;;)
     11   {
     12     char c = *s;
     13     if (c < '0' || c > '9')
     14     {
     15       if (end != NULL)
     16         *end = s;
     17       return result;
     18     }
     19     result *= 10;
     20     result += (c - '0');
     21     s++;
     22   }
     23 }
     24 
     25 UInt64 ConvertOctStringToUInt64(const char *s, const char **end)
     26 {
     27   UInt64 result = 0;
     28   for (;;)
     29   {
     30     char c = *s;
     31     if (c < '0' || c > '7')
     32     {
     33       if (end != NULL)
     34         *end = s;
     35       return result;
     36     }
     37     result <<= 3;
     38     result += (c - '0');
     39     s++;
     40   }
     41 }
     42 
     43 UInt64 ConvertHexStringToUInt64(const char *s, const char **end)
     44 {
     45   UInt64 result = 0;
     46   for (;;)
     47   {
     48     char c = *s;
     49     UInt32 v;
     50     if (c >= '0' && c <= '9') v = (c - '0');
     51     else if (c >= 'A' && c <= 'F') v = 10 + (c - 'A');
     52     else if (c >= 'a' && c <= 'f') v = 10 + (c - 'a');
     53     else
     54     {
     55       if (end != NULL)
     56         *end = s;
     57       return result;
     58     }
     59     result <<= 4;
     60     result |= v;
     61     s++;
     62   }
     63 }
     64 
     65 
     66 UInt64 ConvertStringToUInt64(const wchar_t *s, const wchar_t **end)
     67 {
     68   UInt64 result = 0;
     69   for (;;)
     70   {
     71     wchar_t c = *s;
     72     if (c < '0' || c > '9')
     73     {
     74       if (end != NULL)
     75         *end = s;
     76       return result;
     77     }
     78     result *= 10;
     79     result += (c - '0');
     80     s++;
     81   }
     82 }
     83 
     84 
     85 Int64 ConvertStringToInt64(const char *s, const char **end)
     86 {
     87   if (*s == '-')
     88     return -(Int64)ConvertStringToUInt64(s + 1, end);
     89   return ConvertStringToUInt64(s, end);
     90 }
     91