/* convert an integer into its decimal representation */
void int2dec(int num, char* str) {
	int digit = 0, num_start = 0;
	char* ptr = str;
	/* sign */
	if (num < 0) {
		*ptr++ = '-';
		num *= -1;
		num_start = 1;
	}
	/* convert from the least significant digit */
	while (num) {
		digit = num % 10;
		*ptr++ = digit + '0';
		num /= 10;
	}
	/* add NULL to terminate string */
	*ptr = 0;
	/* reverse the string */
	reverse(str, num_start, strlen(str) - 1);
}

/* convert an integer into its hexadecimal representation */
void int2hex(unsigned int num, char* str) {
	/* hex character array, indexed by hex digit */
	char hex_char[16] = {'0', '1', '2', '3', '4',
			'5', '6', '7', '8', '9',
			'A', 'B', 'C', 'D', 'E', 'F'};
	int digit, cnt = 8;
	/* output 0x */
	str[0] = '0';
	str[1] = 'x';
	/* convert from the least significant bit */
	while(cnt--) {
		digit = num & 0xF;
		str[cnt+2] = hex_char[digit];
		num >>= 4;
	}
	str[10] = 0;
}