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 }