Source code
Revision control
Copy as Markdown
Other Tools
// 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;↩
}↩