для байта на авр можно так:
Код
void itoa_byte(unsigned char n, unsigned char *s)
{
unsigned char ch = 0;
if ((n >= 100) && (++ch))
{
n -= 100;
if ((n >= 100) && (++ch)) n -= 100;
}
*s++ = ch + 0x30;
ch = (n * 157U + (n << 8)) >> 12;
*s++ = ch + 0x30;
ch <<= 1;
n -= ch;
ch <<= 2;
n -=ch;
*s++ = n + 0x30;
}
достаточно быстро и компактно
а лучше так:
Код
void itoa_byte(unsigned char n, unsigned char *s)
{
unsigned char ch = 0x30;
if ((n >= 100) && (++ch) && ((n -= 100) >= 100) && (++ch)) n -= 100;
*s++ = ch;
ch = (n * 157U + (n << 8)) >> 12;
*s++ = ch + 0x30;
ch <<= 1;
n -= ch;
ch <<= 2;
n -=ch;
*s++ = n + 0x30;
}
не, лучше всего так:
Код
void itoa_byte(unsigned char n, unsigned char *s)
{
unsigned char ch = 0x30;
if ((n >= 100) && (++ch) && ((n -= 100) >= 100) && (++ch)) n -= 100;
*s++ = ch;
ch = n * 157U >> 8;
ch += n;
ch >>= 4;
*s++ = ch + 0x30;
ch <<= 1;
n -= ch;
ch <<= 2;
n -=ch;
*s++ = n + 0x30;
}