39 lines
709 B
C
39 lines
709 B
C
char *itoa(int value, char *str, int base) {
|
|
char *p = str;
|
|
char *p1, *p2;
|
|
unsigned int uvalue = value;
|
|
int negative = 0;
|
|
|
|
if (base < 2 || base > 36) {
|
|
*str = '\0';
|
|
return str;
|
|
}
|
|
|
|
if (value < 0 && base == 10) {
|
|
negative = 1;
|
|
uvalue = -value;
|
|
}
|
|
|
|
// Convert to string
|
|
do {
|
|
int digit = uvalue % base;
|
|
*p++ = (digit < 10) ? '0' + digit : 'a' + (digit - 10);
|
|
uvalue /= base;
|
|
} while (uvalue);
|
|
|
|
if (negative)
|
|
*p++ = '-';
|
|
|
|
*p = '\0';
|
|
|
|
// Reverse string
|
|
p1 = str;
|
|
p2 = p - 1;
|
|
while (p1 < p2) {
|
|
char tmp = *p1;
|
|
*p1++ = *p2;
|
|
*p2-- = tmp;
|
|
}
|
|
|
|
return str;
|
|
}
|