Я иногда пользуюсь вот таким кодом в разных вариациях. Написано было еще в универе

CODE
/*******************************************************************************
Преобразовывает переменную UINT8 в строку с гашением не значащих нулей
*******************************************************************************/
INT uint8_2str(UINT8 val, P_CHAR str)
{
INT i, len = 0;
BOOL zero = TRUE;
UINT8 d = 100;
CHAR s;
for(i = 0; i < 3; i++) /* цикл по трем знакам */
{
s = 0; /* формируем сумму искомого числа */
while(val >= d) /* пока порядок не отрицательный */
{
val -= d; /* вычитаем из знака порядок */
s++; /* и увеличиваем искомое число */
}
if(TRUE == zero && s == 0 && i < 2)
{
}
else
{
*str++ = s + 0x30; /* преобразуем в ASCII символ */
len++;
zero = FALSE;
}
d /= 10; /* получаем следующий (младший) порядок */
}
return len;
}
/*******************************************************************************
Преобразовывает переменную UINT8 в строку без гашения
не значащих нулей в диапазоне 0...99 (два знака)
*******************************************************************************/
void uint8_2str2(UINT8 val, P_CHAR str)
{
INT i;
UINT8 d = 10;
CHAR s;
for(i = 0; i < 2; i++) /* цикл по двум знакам */
{
s = 0; /* формируем сумму искомого числа */
while(val >= d) /* пока порядок не отрицательный */
{
val -= d; /* вычитаем из знака порядок */
s++; /* и увеличиваем искомое число */
}
*str++ = s + 0x30; /* преобразуем в ASCII символ */
d /= 10; /* получаем следующий (младший) порядок */
}
}
/*******************************************************************************
Преобразовывает переменную UINT16 в строку
*******************************************************************************/
INT uint16_2str(UINT16 val, P_CHAR str)
{
INT i, len = 0;
BOOL zero = TRUE;
UINT16 d = 10000;
CHAR s;
for(i = 0; i < 5; i++) /* цикл по пяти знакам */
{
s = 0; /* формируем сумму искомого числа */
while(val >= d) /* пока порядок не отрицательный */
{
val-= d; /* вычитаем из знака порядок */
s++; /* и увеличиваем искомое число */
}
if(TRUE == zero && s == 0 && i < 4)
{
}
else
{
*str++ = s + 0x30; /* преобразуем в ASCII символ */
len++;
zero = FALSE;
}
d /= 10; /* получаем следующий (младший) порядок */
}
return len;
}
/*******************************************************************************
Преобразовывает переменную UINT32 в строку
*******************************************************************************/
INT uint32_2str(UINT32 val, P_CHAR str)
{
INT i, len = 0;
BOOL zero = TRUE;
UINT32 d = 1000000000;
CHAR s;
for(i = 0; i < 10; i++) /* цикл по десяти знакам */
{
s = 0; /* формируем сумму искомого числа */
while(val >= d) /* пока порядок не отрицательный */
{
val-= d; /* вычитаем из знака порядок */
s++; /* и увеличиваем искомое число */
}
if(TRUE == zero && s == 0 && i < 9)
{
}
else
{
*str++ = s + 0x30; /* преобразуем в ASCII символ */
len++;
zero = FALSE;
}
d /= 10; /* получаем следующий (младший) порядок */
}
return len;
}
/*******************************************************************************
Преобразует строку в 8-бит число.
Возвращает количество цифр в числе, 0 - если строка не число.
*******************************************************************************/
INT str2_uint8(P_CHAR str, P_UINT8 val)
{
INT i = 0;
UINT8 res = 0;
CHAR s;
while(i < 3)
{
s = *str++;
if(s < '0' || s > '9')
break;
res = res * 10 + s - '0';
i++;
}
*val = res;
return i;
}
/*******************************************************************************
Преобразует строку в 16-бит число.
Возвращает количество цифр в числе, 0 - если строка не число.
*******************************************************************************/
INT str2_uint16(P_CHAR str, P_UINT16 val)
{
INT i = 0;
UINT16 res = 0;
CHAR s;
while(i < 5)
{
s = *str++;
if(s < '0' || s > '9')
break;
res = res * 10 + s - '0';
i++;
}
*val = res;
return i;
}
/*******************************************************************************
Преобразует строку в 16-бит число.
Возвращает количество цифр в числе, 0 - если строка не число.
*******************************************************************************/
INT str2_uint32(P_CHAR str, P_UINT32 val)
{
INT i = 0;
UINT32 res = 0;
CHAR s;
while(i < 10)
{
s = *str++;
if(s < '0' || s > '9')
break;
res = res * 10 + s - '0';
i++;
}
*val = res;
return i;
}