mirror of
https://github.com/tailix/kernel.git
synced 2024-10-30 12:03:52 -04:00
39 lines
742 B
C
39 lines
742 B
C
void kitoa(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--;
|
|
}
|
|
}
|