1*f6dc9357SAndroid Build Coastguard Worker // Common/IntToString.cpp
2*f6dc9357SAndroid Build Coastguard Worker
3*f6dc9357SAndroid Build Coastguard Worker #include "StdAfx.h"
4*f6dc9357SAndroid Build Coastguard Worker
5*f6dc9357SAndroid Build Coastguard Worker #include "../../C/CpuArch.h"
6*f6dc9357SAndroid Build Coastguard Worker
7*f6dc9357SAndroid Build Coastguard Worker #include "IntToString.h"
8*f6dc9357SAndroid Build Coastguard Worker
9*f6dc9357SAndroid Build Coastguard Worker #define CONVERT_INT_TO_STR(charType, tempSize) \
10*f6dc9357SAndroid Build Coastguard Worker if (val < 10) \
11*f6dc9357SAndroid Build Coastguard Worker *s++ = (charType)('0' + (unsigned)val); \
12*f6dc9357SAndroid Build Coastguard Worker else { \
13*f6dc9357SAndroid Build Coastguard Worker Byte temp[tempSize]; \
14*f6dc9357SAndroid Build Coastguard Worker size_t i = 0; \
15*f6dc9357SAndroid Build Coastguard Worker do { \
16*f6dc9357SAndroid Build Coastguard Worker temp[++i] = (Byte)('0' + (unsigned)(val % 10)); \
17*f6dc9357SAndroid Build Coastguard Worker val /= 10; } \
18*f6dc9357SAndroid Build Coastguard Worker while (val >= 10); \
19*f6dc9357SAndroid Build Coastguard Worker *s++ = (charType)('0' + (unsigned)val); \
20*f6dc9357SAndroid Build Coastguard Worker do { *s++ = (charType)temp[i]; } \
21*f6dc9357SAndroid Build Coastguard Worker while (--i); \
22*f6dc9357SAndroid Build Coastguard Worker } \
23*f6dc9357SAndroid Build Coastguard Worker *s = 0; \
24*f6dc9357SAndroid Build Coastguard Worker return s;
25*f6dc9357SAndroid Build Coastguard Worker
ConvertUInt32ToString(UInt32 val,char * s)26*f6dc9357SAndroid Build Coastguard Worker char * ConvertUInt32ToString(UInt32 val, char *s) throw()
27*f6dc9357SAndroid Build Coastguard Worker {
28*f6dc9357SAndroid Build Coastguard Worker CONVERT_INT_TO_STR(char, 16)
29*f6dc9357SAndroid Build Coastguard Worker }
30*f6dc9357SAndroid Build Coastguard Worker
ConvertUInt64ToString(UInt64 val,char * s)31*f6dc9357SAndroid Build Coastguard Worker char * ConvertUInt64ToString(UInt64 val, char *s) throw()
32*f6dc9357SAndroid Build Coastguard Worker {
33*f6dc9357SAndroid Build Coastguard Worker if (val <= (UInt32)0xFFFFFFFF)
34*f6dc9357SAndroid Build Coastguard Worker return ConvertUInt32ToString((UInt32)val, s);
35*f6dc9357SAndroid Build Coastguard Worker CONVERT_INT_TO_STR(char, 24)
36*f6dc9357SAndroid Build Coastguard Worker }
37*f6dc9357SAndroid Build Coastguard Worker
ConvertUInt32ToString(UInt32 val,wchar_t * s)38*f6dc9357SAndroid Build Coastguard Worker wchar_t * ConvertUInt32ToString(UInt32 val, wchar_t *s) throw()
39*f6dc9357SAndroid Build Coastguard Worker {
40*f6dc9357SAndroid Build Coastguard Worker CONVERT_INT_TO_STR(wchar_t, 16)
41*f6dc9357SAndroid Build Coastguard Worker }
42*f6dc9357SAndroid Build Coastguard Worker
ConvertUInt64ToString(UInt64 val,wchar_t * s)43*f6dc9357SAndroid Build Coastguard Worker wchar_t * ConvertUInt64ToString(UInt64 val, wchar_t *s) throw()
44*f6dc9357SAndroid Build Coastguard Worker {
45*f6dc9357SAndroid Build Coastguard Worker if (val <= (UInt32)0xFFFFFFFF)
46*f6dc9357SAndroid Build Coastguard Worker return ConvertUInt32ToString((UInt32)val, s);
47*f6dc9357SAndroid Build Coastguard Worker CONVERT_INT_TO_STR(wchar_t, 24)
48*f6dc9357SAndroid Build Coastguard Worker }
49*f6dc9357SAndroid Build Coastguard Worker
ConvertInt64ToString(Int64 val,char * s)50*f6dc9357SAndroid Build Coastguard Worker void ConvertInt64ToString(Int64 val, char *s) throw()
51*f6dc9357SAndroid Build Coastguard Worker {
52*f6dc9357SAndroid Build Coastguard Worker if (val < 0)
53*f6dc9357SAndroid Build Coastguard Worker {
54*f6dc9357SAndroid Build Coastguard Worker *s++ = '-';
55*f6dc9357SAndroid Build Coastguard Worker val = -val;
56*f6dc9357SAndroid Build Coastguard Worker }
57*f6dc9357SAndroid Build Coastguard Worker ConvertUInt64ToString((UInt64)val, s);
58*f6dc9357SAndroid Build Coastguard Worker }
59*f6dc9357SAndroid Build Coastguard Worker
ConvertInt64ToString(Int64 val,wchar_t * s)60*f6dc9357SAndroid Build Coastguard Worker void ConvertInt64ToString(Int64 val, wchar_t *s) throw()
61*f6dc9357SAndroid Build Coastguard Worker {
62*f6dc9357SAndroid Build Coastguard Worker if (val < 0)
63*f6dc9357SAndroid Build Coastguard Worker {
64*f6dc9357SAndroid Build Coastguard Worker *s++ = L'-';
65*f6dc9357SAndroid Build Coastguard Worker val = -val;
66*f6dc9357SAndroid Build Coastguard Worker }
67*f6dc9357SAndroid Build Coastguard Worker ConvertUInt64ToString((UInt64)val, s);
68*f6dc9357SAndroid Build Coastguard Worker }
69*f6dc9357SAndroid Build Coastguard Worker
70*f6dc9357SAndroid Build Coastguard Worker
ConvertUInt64ToOct(UInt64 val,char * s)71*f6dc9357SAndroid Build Coastguard Worker void ConvertUInt64ToOct(UInt64 val, char *s) throw()
72*f6dc9357SAndroid Build Coastguard Worker {
73*f6dc9357SAndroid Build Coastguard Worker {
74*f6dc9357SAndroid Build Coastguard Worker UInt64 v = val;
75*f6dc9357SAndroid Build Coastguard Worker do
76*f6dc9357SAndroid Build Coastguard Worker s++;
77*f6dc9357SAndroid Build Coastguard Worker while (v >>= 3);
78*f6dc9357SAndroid Build Coastguard Worker }
79*f6dc9357SAndroid Build Coastguard Worker *s = 0;
80*f6dc9357SAndroid Build Coastguard Worker do
81*f6dc9357SAndroid Build Coastguard Worker {
82*f6dc9357SAndroid Build Coastguard Worker const unsigned t = (unsigned)val & 7;
83*f6dc9357SAndroid Build Coastguard Worker *--s = (char)('0' + t);
84*f6dc9357SAndroid Build Coastguard Worker }
85*f6dc9357SAndroid Build Coastguard Worker while (val >>= 3);
86*f6dc9357SAndroid Build Coastguard Worker }
87*f6dc9357SAndroid Build Coastguard Worker
88*f6dc9357SAndroid Build Coastguard Worker MY_ALIGN(16) const char k_Hex_Upper[16] =
89*f6dc9357SAndroid Build Coastguard Worker { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
90*f6dc9357SAndroid Build Coastguard Worker MY_ALIGN(16) const char k_Hex_Lower[16] =
91*f6dc9357SAndroid Build Coastguard Worker { '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f' };
92*f6dc9357SAndroid Build Coastguard Worker
ConvertUInt32ToHex(UInt32 val,char * s)93*f6dc9357SAndroid Build Coastguard Worker void ConvertUInt32ToHex(UInt32 val, char *s) throw()
94*f6dc9357SAndroid Build Coastguard Worker {
95*f6dc9357SAndroid Build Coastguard Worker {
96*f6dc9357SAndroid Build Coastguard Worker UInt32 v = val;
97*f6dc9357SAndroid Build Coastguard Worker do
98*f6dc9357SAndroid Build Coastguard Worker s++;
99*f6dc9357SAndroid Build Coastguard Worker while (v >>= 4);
100*f6dc9357SAndroid Build Coastguard Worker }
101*f6dc9357SAndroid Build Coastguard Worker *s = 0;
102*f6dc9357SAndroid Build Coastguard Worker do
103*f6dc9357SAndroid Build Coastguard Worker {
104*f6dc9357SAndroid Build Coastguard Worker const unsigned t = (unsigned)val & 0xF;
105*f6dc9357SAndroid Build Coastguard Worker *--s = GET_HEX_CHAR_UPPER(t);
106*f6dc9357SAndroid Build Coastguard Worker }
107*f6dc9357SAndroid Build Coastguard Worker while (val >>= 4);
108*f6dc9357SAndroid Build Coastguard Worker }
109*f6dc9357SAndroid Build Coastguard Worker
ConvertUInt64ToHex(UInt64 val,char * s)110*f6dc9357SAndroid Build Coastguard Worker void ConvertUInt64ToHex(UInt64 val, char *s) throw()
111*f6dc9357SAndroid Build Coastguard Worker {
112*f6dc9357SAndroid Build Coastguard Worker {
113*f6dc9357SAndroid Build Coastguard Worker UInt64 v = val;
114*f6dc9357SAndroid Build Coastguard Worker do
115*f6dc9357SAndroid Build Coastguard Worker s++;
116*f6dc9357SAndroid Build Coastguard Worker while (v >>= 4);
117*f6dc9357SAndroid Build Coastguard Worker }
118*f6dc9357SAndroid Build Coastguard Worker *s = 0;
119*f6dc9357SAndroid Build Coastguard Worker do
120*f6dc9357SAndroid Build Coastguard Worker {
121*f6dc9357SAndroid Build Coastguard Worker const unsigned t = (unsigned)val & 0xF;
122*f6dc9357SAndroid Build Coastguard Worker *--s = GET_HEX_CHAR_UPPER(t);
123*f6dc9357SAndroid Build Coastguard Worker }
124*f6dc9357SAndroid Build Coastguard Worker while (val >>= 4);
125*f6dc9357SAndroid Build Coastguard Worker }
126*f6dc9357SAndroid Build Coastguard Worker
ConvertUInt32ToHex8Digits(UInt32 val,char * s)127*f6dc9357SAndroid Build Coastguard Worker void ConvertUInt32ToHex8Digits(UInt32 val, char *s) throw()
128*f6dc9357SAndroid Build Coastguard Worker {
129*f6dc9357SAndroid Build Coastguard Worker s[8] = 0;
130*f6dc9357SAndroid Build Coastguard Worker int i = 7;
131*f6dc9357SAndroid Build Coastguard Worker do
132*f6dc9357SAndroid Build Coastguard Worker {
133*f6dc9357SAndroid Build Coastguard Worker { const unsigned t = (unsigned)val & 0xF; s[i--] = GET_HEX_CHAR_UPPER(t); }
134*f6dc9357SAndroid Build Coastguard Worker { const unsigned t = (Byte)val >> 4; val >>= 8; s[i--] = GET_HEX_CHAR_UPPER(t); }
135*f6dc9357SAndroid Build Coastguard Worker }
136*f6dc9357SAndroid Build Coastguard Worker while (i >= 0);
137*f6dc9357SAndroid Build Coastguard Worker }
138*f6dc9357SAndroid Build Coastguard Worker
139*f6dc9357SAndroid Build Coastguard Worker /*
140*f6dc9357SAndroid Build Coastguard Worker void ConvertUInt32ToHex8Digits(UInt32 val, wchar_t *s)
141*f6dc9357SAndroid Build Coastguard Worker {
142*f6dc9357SAndroid Build Coastguard Worker s[8] = 0;
143*f6dc9357SAndroid Build Coastguard Worker for (int i = 7; i >= 0; i--)
144*f6dc9357SAndroid Build Coastguard Worker {
145*f6dc9357SAndroid Build Coastguard Worker const unsigned t = (unsigned)val & 0xF;
146*f6dc9357SAndroid Build Coastguard Worker val >>= 4;
147*f6dc9357SAndroid Build Coastguard Worker s[i] = GET_HEX_CHAR(t);
148*f6dc9357SAndroid Build Coastguard Worker }
149*f6dc9357SAndroid Build Coastguard Worker }
150*f6dc9357SAndroid Build Coastguard Worker */
151*f6dc9357SAndroid Build Coastguard Worker
152*f6dc9357SAndroid Build Coastguard Worker
153*f6dc9357SAndroid Build Coastguard Worker MY_ALIGN(16) static const Byte k_Guid_Pos[] =
154*f6dc9357SAndroid Build Coastguard Worker { 6,4,2,0, 11,9, 16,14, 19,21, 24,26,28,30,32,34 };
155*f6dc9357SAndroid Build Coastguard Worker
RawLeGuidToString(const Byte * g,char * s)156*f6dc9357SAndroid Build Coastguard Worker char *RawLeGuidToString(const Byte *g, char *s) throw()
157*f6dc9357SAndroid Build Coastguard Worker {
158*f6dc9357SAndroid Build Coastguard Worker s[ 8] = '-';
159*f6dc9357SAndroid Build Coastguard Worker s[13] = '-';
160*f6dc9357SAndroid Build Coastguard Worker s[18] = '-';
161*f6dc9357SAndroid Build Coastguard Worker s[23] = '-';
162*f6dc9357SAndroid Build Coastguard Worker s[36] = 0;
163*f6dc9357SAndroid Build Coastguard Worker for (unsigned i = 0; i < 16; i++)
164*f6dc9357SAndroid Build Coastguard Worker {
165*f6dc9357SAndroid Build Coastguard Worker char *s2 = s + k_Guid_Pos[i];
166*f6dc9357SAndroid Build Coastguard Worker const unsigned v = g[i];
167*f6dc9357SAndroid Build Coastguard Worker s2[0] = GET_HEX_CHAR_UPPER(v >> 4);
168*f6dc9357SAndroid Build Coastguard Worker s2[1] = GET_HEX_CHAR_UPPER(v & 0xF);
169*f6dc9357SAndroid Build Coastguard Worker }
170*f6dc9357SAndroid Build Coastguard Worker return s + 36;
171*f6dc9357SAndroid Build Coastguard Worker }
172*f6dc9357SAndroid Build Coastguard Worker
RawLeGuidToString_Braced(const Byte * g,char * s)173*f6dc9357SAndroid Build Coastguard Worker char *RawLeGuidToString_Braced(const Byte *g, char *s) throw()
174*f6dc9357SAndroid Build Coastguard Worker {
175*f6dc9357SAndroid Build Coastguard Worker *s++ = '{';
176*f6dc9357SAndroid Build Coastguard Worker s = RawLeGuidToString(g, s);
177*f6dc9357SAndroid Build Coastguard Worker *s++ = '}';
178*f6dc9357SAndroid Build Coastguard Worker *s = 0;
179*f6dc9357SAndroid Build Coastguard Worker return s;
180*f6dc9357SAndroid Build Coastguard Worker }
181*f6dc9357SAndroid Build Coastguard Worker
182*f6dc9357SAndroid Build Coastguard Worker
ConvertDataToHex_Lower(char * dest,const Byte * src,size_t size)183*f6dc9357SAndroid Build Coastguard Worker void ConvertDataToHex_Lower(char *dest, const Byte *src, size_t size) throw()
184*f6dc9357SAndroid Build Coastguard Worker {
185*f6dc9357SAndroid Build Coastguard Worker if (size)
186*f6dc9357SAndroid Build Coastguard Worker {
187*f6dc9357SAndroid Build Coastguard Worker const Byte *lim = src + size;
188*f6dc9357SAndroid Build Coastguard Worker do
189*f6dc9357SAndroid Build Coastguard Worker {
190*f6dc9357SAndroid Build Coastguard Worker const unsigned b = *src++;
191*f6dc9357SAndroid Build Coastguard Worker dest[0] = GET_HEX_CHAR_LOWER(b >> 4);
192*f6dc9357SAndroid Build Coastguard Worker dest[1] = GET_HEX_CHAR_LOWER(b & 0xF);
193*f6dc9357SAndroid Build Coastguard Worker dest += 2;
194*f6dc9357SAndroid Build Coastguard Worker }
195*f6dc9357SAndroid Build Coastguard Worker while (src != lim);
196*f6dc9357SAndroid Build Coastguard Worker }
197*f6dc9357SAndroid Build Coastguard Worker *dest = 0;
198*f6dc9357SAndroid Build Coastguard Worker }
199*f6dc9357SAndroid Build Coastguard Worker
ConvertDataToHex_Upper(char * dest,const Byte * src,size_t size)200*f6dc9357SAndroid Build Coastguard Worker void ConvertDataToHex_Upper(char *dest, const Byte *src, size_t size) throw()
201*f6dc9357SAndroid Build Coastguard Worker {
202*f6dc9357SAndroid Build Coastguard Worker if (size)
203*f6dc9357SAndroid Build Coastguard Worker {
204*f6dc9357SAndroid Build Coastguard Worker const Byte *lim = src + size;
205*f6dc9357SAndroid Build Coastguard Worker do
206*f6dc9357SAndroid Build Coastguard Worker {
207*f6dc9357SAndroid Build Coastguard Worker const unsigned b = *src++;
208*f6dc9357SAndroid Build Coastguard Worker dest[0] = GET_HEX_CHAR_UPPER(b >> 4);
209*f6dc9357SAndroid Build Coastguard Worker dest[1] = GET_HEX_CHAR_UPPER(b & 0xF);
210*f6dc9357SAndroid Build Coastguard Worker dest += 2;
211*f6dc9357SAndroid Build Coastguard Worker }
212*f6dc9357SAndroid Build Coastguard Worker while (src != lim);
213*f6dc9357SAndroid Build Coastguard Worker }
214*f6dc9357SAndroid Build Coastguard Worker *dest = 0;
215*f6dc9357SAndroid Build Coastguard Worker }
216