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