Mercurial > vba-clojure
comparison src/win32/7zip/7z/CPP/Common/StringToInt.cpp @ 1:f9f4f1b99eed
importing src directory
author | Robert McIntyre <rlm@mit.edu> |
---|---|
date | Sat, 03 Mar 2012 10:31:27 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:8ced16adf2e1 | 1:f9f4f1b99eed |
---|---|
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 } |