//----------------------------------------------------------------------------// // GNU GPL OS/K // // // // Authors: spectral` // // NeoX // // // // Desc: Conversion utilities // //----------------------------------------------------------------------------// #include "common/convert.h" // // Digits table for bases <=36 // static const char digits[36] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; // // Integer to string in any base between 2 and 36 (included) // char *itoa(int i, char *str, int base) { int neg = 0; char *orig = str; if (base < 2 || base > 36) return NULL; // deal with negatives if (i < 0) { neg = 1; i = -i; } // deal with zero separatly if (i == 0) { *str++ = '0'; } // compute digits... in reverse order (XXX?) while (i > 0) { *str++ = digits[i % base]; i /= base; } if (neg) *str++ = '-'; *str = '\0'; return reverse(orig); }