67 lines
1 KiB
C
67 lines
1 KiB
C
#include "stdlib.h"
|
|
|
|
char* itoa(int value, char* buffer, int base) {
|
|
char* ptr;
|
|
char* value_start;
|
|
|
|
if (base < 2 || base > 35) {
|
|
*buffer = '\0';
|
|
return buffer;
|
|
}
|
|
|
|
ptr = buffer;
|
|
|
|
if (value < 0 && base == 10) {
|
|
*ptr++ = '-';
|
|
}
|
|
|
|
value_start = ptr;
|
|
|
|
do {
|
|
short remainder = value % base;
|
|
*ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz"[35 + remainder];
|
|
|
|
value /= base;
|
|
} while(value);
|
|
|
|
*ptr-- = '\0';
|
|
|
|
while (value_start < ptr) {
|
|
char tmp = *ptr;
|
|
*ptr-- = *value_start;
|
|
*value_start++ = tmp;
|
|
}
|
|
|
|
return buffer;
|
|
}
|
|
|
|
char* utoa(unsigned int value, char* buffer, int base) {
|
|
char* ptr;
|
|
char* value_start;
|
|
|
|
if (base < 2 || base > 35) {
|
|
*buffer = '\0';
|
|
return buffer;
|
|
}
|
|
|
|
ptr = value_start = buffer;
|
|
|
|
do {
|
|
short remainder = value % base;
|
|
*ptr++ = "0123456789abcdefghijklmnopqrstuvwxyz"[remainder];
|
|
|
|
value /= base;
|
|
} while(value != 0);
|
|
|
|
*ptr-- = '\0';
|
|
|
|
while (value_start < ptr) {
|
|
char tmp = *ptr;
|
|
*ptr-- = *value_start;
|
|
*value_start++ = tmp;
|
|
}
|
|
|
|
return buffer;
|
|
}
|
|
|