X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/45e1f8b055043e54be35462852ab6649d634da7c..2a49908006b177c4d6354309333d06b1b96e4887:/lunaix-os/usr/libc/src/itoa.c diff --git a/lunaix-os/usr/libc/src/itoa.c b/lunaix-os/usr/libc/src/itoa.c new file mode 100644 index 0000000..d60599f --- /dev/null +++ b/lunaix-os/usr/libc/src/itoa.c @@ -0,0 +1,46 @@ +#include +#include + +char base_char[] = "0123456789abcdefghijklmnopqrstuvwxyz"; + +char* +__uitoa_internal(unsigned int value, char* str, int base, unsigned int* size) +{ + unsigned int ptr = 0; + do { + str[ptr] = base_char[value % base]; + value = value / base; + ptr++; + } while (value); + + for (unsigned int i = 0; i < (ptr >> 1); i++) { + char c = str[i]; + str[i] = str[ptr - i - 1]; + str[ptr - i - 1] = c; + } + str[ptr] = '\0'; + if (size) { + *size = ptr; + } + return str; +} + +char* +__itoa_internal(int value, char* str, int base, unsigned int* size) +{ + if (value < 0 && base == 10) { + str[0] = '-'; + unsigned int _v = (unsigned int)(-value); + __uitoa_internal(_v, str + 1, base, size); + } else { + __uitoa_internal(value, str, base, size); + } + + return str; +} + +char* +itoa(int value, char* str, int base) +{ + return __itoa_internal(value, str, base, NULL); +} \ No newline at end of file