#include "NumToString.h"

static char conv[16] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

char* numToString_u(unsigned long num,char theNum[11])
{
	char str[11];
	char* p = str;
	char* d = theNum;
	
	if(!num)
		*(short*)d = '0\0';
	else
	{
		while(num)
		{
			*p++ = conv[num % 10];
			num /= 10;
		}
		
		while(p>str)
			*d++ = *--p;
		
		*d = 0;
	}
	
	return theNum;
}

char* numToString_s(long num,char theNum[11])
{
	char* p = theNum;
	
	if(num < 0)
	{
		*p++ = '-';
		num = -num;
	}
	
	numToString_u(num,p);
	
	return theNum;
}

char* numToHex(unsigned long num,char theNum[11])
{
	*(short *)theNum = '0x';
	theNum[10] = '\0';
	
	for(long i=0;i<8;i++)
		theNum[i+2] = conv[ (num & (0xF0000000 >> (i*4))) >> ( (7-i)*4) ];
	
	return theNum;
}

char* numToHex(unsigned short num,char theNum[7])
{
	*(short*)theNum = '0x';
	theNum[6] = '\0';
	
	for(long i=0;i<4;i++)
		theNum[i+2] = conv[ (num & (0xF000 >> (i*4))) >> ( (3-i)*4) ];
	
	return theNum;
}

char* numToHex(unsigned char num,char theNum[5])
{
	*(short*)theNum = '0x';
	theNum[2] = conv[num >> 4];
	theNum[3] = conv[num & 0x0F];
	theNum[4] = '\0';
	
	return theNum;
}
