// Common/IntToString.cpp #include "StdAfx.h" #include "../../C/CpuArch.h" #include "IntToString.h" #define CONVERT_INT_TO_STR(charType, tempSize) \ unsigned char temp[tempSize]; unsigned i = 0; \ while (val >= 10) { temp[i++] = (unsigned char)('0' + (unsigned)(val % 10)); val /= 10; } \ *s++ = (charType)('0' + (unsigned)val); \ while (i != 0) { i--; *s++ = temp[i]; } \ *s = 0; void ConvertUInt32ToString(UInt32 val, char *s) throw() { CONVERT_INT_TO_STR(char, 16); } void ConvertUInt64ToString(UInt64 val, char *s) throw() { if (val <= (UInt32)0xFFFFFFFF) { ConvertUInt32ToString((UInt32)val, s); return; } CONVERT_INT_TO_STR(char, 24); } void ConvertUInt64ToOct(UInt64 val, char *s) throw() { UInt64 v = val; unsigned i; for (i = 1;; i++) { v >>= 3; if (v == 0) break; } s[i] = 0; do { unsigned t = (unsigned)(val & 0x7); val >>= 3; s[--i] = (char)('0' + t); } while (i); } #define GET_HEX_CHAR(t) ((char)(((t < 10) ? ('0' + t) : ('A' + (t - 10))))) static inline char GetHexChar(unsigned t) { return GET_HEX_CHAR(t); } void ConvertUInt32ToHex(UInt32 val, char *s) throw() { UInt32 v = val; unsigned i; for (i = 1;; i++) { v >>= 4; if (v == 0) break; } s[i] = 0; do { unsigned t = (unsigned)(val & 0xF); val >>= 4; s[--i] = GET_HEX_CHAR(t); } while (i); } void ConvertUInt64ToHex(UInt64 val, char *s) throw() { UInt64 v = val; unsigned i; for (i = 1;; i++) { v >>= 4; if (v == 0) break; } s[i] = 0; do { unsigned t = (unsigned)(val & 0xF); val >>= 4; s[--i] = GET_HEX_CHAR(t); } while (i); } void ConvertUInt32ToHex8Digits(UInt32 val, char *s) throw() { s[8] = 0; for (int i = 7; i >= 0; i--) { unsigned t = val & 0xF; val >>= 4; s[i] = GET_HEX_CHAR(t);; } } /* void ConvertUInt32ToHex8Digits(UInt32 val, wchar_t *s) { s[8] = 0; for (int i = 7; i >= 0; i--) { unsigned t = val & 0xF; val >>= 4; s[i] = (wchar_t)(((t < 10) ? ('0' + t) : ('A' + (t - 10)))); } } */ void ConvertUInt32ToString(UInt32 val, wchar_t *s) throw() { CONVERT_INT_TO_STR(wchar_t, 16); } void ConvertUInt64ToString(UInt64 val, wchar_t *s) throw() { if (val <= (UInt32)0xFFFFFFFF) { ConvertUInt32ToString((UInt32)val, s); return; } CONVERT_INT_TO_STR(wchar_t, 24); } void ConvertInt64ToString(Int64 val, char *s) throw() { if (val < 0) { *s++ = '-'; val = -val; } ConvertUInt64ToString(val, s); } void ConvertInt64ToString(Int64 val, wchar_t *s) throw() { if (val < 0) { *s++ = L'-'; val = -val; } ConvertUInt64ToString(val, s); } static void ConvertByteToHex2Digits(unsigned v, char *s) throw() { s[0] = GetHexChar(v >> 4); s[1] = GetHexChar(v & 0xF); } static void ConvertUInt16ToHex4Digits(UInt32 val, char *s) throw() { ConvertByteToHex2Digits(val >> 8, s); ConvertByteToHex2Digits(val & 0xFF, s + 2); } char *RawLeGuidToString(const Byte *g, char *s) throw() { ConvertUInt32ToHex8Digits(GetUi32(g ), s); s += 8; *s++ = '-'; ConvertUInt16ToHex4Digits(GetUi16(g + 4), s); s += 4; *s++ = '-'; ConvertUInt16ToHex4Digits(GetUi16(g + 6), s); s += 4; *s++ = '-'; for (unsigned i = 0; i < 8; i++) { if (i == 2) *s++ = '-'; ConvertByteToHex2Digits(g[8 + i], s); s += 2; } *s = 0; return s; } char *RawLeGuidToString_Braced(const Byte *g, char *s) throw() { *s++ = '{'; s = RawLeGuidToString(g, s); *s++ = '}'; *s = 0; return s; }