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 14 void ConvertUInt32ToString(UInt32 val, char *s) throw() 15 { 16 CONVERT_INT_TO_STR(char, 16); 17 } 18 19 void 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 29 void 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 49 void 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 69 void 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 89 void 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 /* 101 void 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 113 void ConvertUInt32ToString(UInt32 val, wchar_t *s) throw() 114 { 115 CONVERT_INT_TO_STR(wchar_t, 16); 116 } 117 118 void 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 128 void ConvertInt64ToString(Int64 val, char *s) throw() 129 { 130 if (val < 0) 131 { 132 *s++ = '-'; 133 val = -val; 134 } 135 ConvertUInt64ToString(val, s); 136 } 137 138 void 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