1 // Common/StringToInt.cpp
2
3 #include "StdAfx.h"
4
5 #include "StringToInt.h"
6
ConvertStringToUInt64(const char * s,const char ** end)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
ConvertOctStringToUInt64(const char * s,const char ** end)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
ConvertHexStringToUInt64(const char * s,const char ** end)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
ConvertStringToUInt64(const wchar_t * s,const wchar_t ** end)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
ConvertStringToInt64(const char * s,const char ** end)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