1
0
Fork 0
mirror of https://github.com/tailix/kernel.git synced 2024-10-30 12:03:52 -04:00
kernel/libk/itoa.c

40 lines
741 B
C
Raw Normal View History

2017-11-04 02:04:04 -04:00
void itoa(char *buf, int base, int d)
{
char *p = buf;
char *p1, *p2;
unsigned long ud = d;
int divisor = 10;
// If %d is specified and D is minus, put '-' in the head.
if (base == 'd' && d < 0) {
*p++ = '-';
buf++;
ud = -d;
}
else if (base == 'x') {
divisor = 16;
}
// Divide UD by DIVISOR until UD == 0.
do {
int remainder = ud % divisor;
*p++ = (remainder < 10) ? remainder + '0' : remainder + 'A' - 10;
}
while (ud /= divisor);
// Terminate BUF.
*p = 0;
// Reverse BUF.
p1 = buf;
p2 = p - 1;
while (p1 < p2) {
char tmp = *p1;
*p1 = *p2;
*p2 = tmp;
p1++;
p2--;
}
}