#define BASE_MAX (26 + 10)
char const* itostr(int x, int base)
{
/* map 居中, 支技负余数 */
static char const * const map =
&"ZYXWVUTSRQPONMLKJIHGFEDCBA987654321"
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
[BASE_MAX - 1];
/* 静态缓冲,不支持多线程, 每次调用都覆盖上次的值 */
static char buf[BASE_MAX];
int oldx;
/* 从缓冲尾部逆向使用 */
char* p = buf + sizeof(buf) - 1;
*p = ‘\0‘;
/* 不合法的base返回空串 */
if (base < 2 || base > 36) {
return p;
}
do {
/* 保存原数,用一次乘法取代取模*/
oldx = x;
x = x / base;
/* 先减后用 */
*--p = map[oldx - x * base];
} while (x);
/* 负数的加上符号 */
if (oldx < 0) *--p = ‘-‘;
return p;
}