1// Common/IntToString.cpp
2
3#include "StdAfx.h"
4
5#include "IntToString.h"
6
7#define CONVERT_INT_TO_STR(charType, tempSize) \
8  unsigned char temp[tempSize]; unsigned i = 0; \
9  while (val >= 10) { temp[i++] = (unsigned char)('0' + (unsigned)(val % 10)); val /= 10; } \
10  *s++ = (charType)('0' + (unsigned)val); \
11  while (i != 0) { i--; *s++ = temp[i]; } \
12  *s = 0;
13
14void ConvertUInt32ToString(UInt32 val, char *s) throw()
15{
16  CONVERT_INT_TO_STR(char, 16);
17}
18
19void ConvertUInt64ToString(UInt64 val, char *s) throw()
20{
21  if (val <= (UInt32)0xFFFFFFFF)
22  {
23    ConvertUInt32ToString((UInt32)val, s);
24    return;
25  }
26  CONVERT_INT_TO_STR(char, 24);
27}
28
29void ConvertUInt64ToOct(UInt64 val, char *s) throw()
30{
31  UInt64 v = val;
32  unsigned i;
33  for (i = 1;; i++)
34  {
35    v >>= 3;
36    if (v == 0)
37      break;
38  }
39  s[i] = 0;
40  do
41  {
42    unsigned t = (unsigned)(val & 0x7);
43    val >>= 3;
44    s[--i] = (char)('0' + t);
45  }
46  while (i);
47}
48
49void ConvertUInt32ToHex(UInt32 val, char *s) throw()
50{
51  UInt32 v = val;
52  unsigned i;
53  for (i = 1;; i++)
54  {
55    v >>= 4;
56    if (v == 0)
57      break;
58  }
59  s[i] = 0;
60  do
61  {
62    unsigned t = (unsigned)((val & 0xF));
63    val >>= 4;
64    s[--i] = (char)((t < 10) ? ('0' + t) : ('A' + (t - 10)));
65  }
66  while (i);
67}
68
69void ConvertUInt64ToHex(UInt64 val, char *s) throw()
70{
71  UInt64 v = val;
72  unsigned i;
73  for (i = 1;; i++)
74  {
75    v >>= 4;
76    if (v == 0)
77      break;
78  }
79  s[i] = 0;
80  do
81  {
82    unsigned t = (unsigned)((val & 0xF));
83    val >>= 4;
84    s[--i] = (char)((t < 10) ? ('0' + t) : ('A' + (t - 10)));
85  }
86  while (i);
87}
88
89void ConvertUInt32ToHex8Digits(UInt32 val, char *s) throw()
90{
91  s[8] = 0;
92  for (int i = 7; i >= 0; i--)
93  {
94    unsigned t = val & 0xF;
95    val >>= 4;
96    s[i] = (char)(((t < 10) ? ('0' + t) : ('A' + (t - 10))));
97  }
98}
99
100/*
101void ConvertUInt32ToHex8Digits(UInt32 val, wchar_t *s)
102{
103  s[8] = 0;
104  for (int i = 7; i >= 0; i--)
105  {
106    unsigned t = val & 0xF;
107    val >>= 4;
108    s[i] = (wchar_t)(((t < 10) ? ('0' + t) : ('A' + (t - 10))));
109  }
110}
111*/
112
113void ConvertUInt32ToString(UInt32 val, wchar_t *s) throw()
114{
115  CONVERT_INT_TO_STR(wchar_t, 16);
116}
117
118void ConvertUInt64ToString(UInt64 val, wchar_t *s) throw()
119{
120  if (val <= (UInt32)0xFFFFFFFF)
121  {
122    ConvertUInt32ToString((UInt32)val, s);
123    return;
124  }
125  CONVERT_INT_TO_STR(wchar_t, 24);
126}
127
128void ConvertInt64ToString(Int64 val, char *s) throw()
129{
130  if (val < 0)
131  {
132    *s++ = '-';
133    val = -val;
134  }
135  ConvertUInt64ToString(val, s);
136}
137
138void ConvertInt64ToString(Int64 val, wchar_t *s) throw()
139{
140  if (val < 0)
141  {
142    *s++ = L'-';
143    val = -val;
144  }
145  ConvertUInt64ToString(val, s);
146}
147