下面是网上找的一个itoa实现。刚开始觉得应该在函数最开始的时候判断value的正负,如果是负的就转化为正数,这样就不需要使用字符串“z-a9-0-9a-z”,而只需要使用“0-9a-z”。后来才发现这种方法不能正确的处理INT_MIN,因为-INT_MIN == INT_MIN,依然是负数!
/** * C++ version 0.4 char* style "itoa": * Written by Lukás Chmela * Released under GPLv3. */ char* itoa(int value, char* result, int base) { // check that the base if valid if (base < 2 || base > 36) { *result = '\0'; return result; } char* ptr = result, *ptr1 = result, tmp_char; int tmp_value; do { tmp_value = value; value /= base; *ptr++ = "zyxwvutsrqponmlkjihgfedcba9876543210123456789abcdefghijklmnopqrstuvwxyz" [35 + (tmp_value - value * base)]; } while ( value ); // Apply negative sign if (tmp_value < 0) *ptr++ = '-'; *ptr-- = '\0'; while(ptr1 < ptr) { tmp_char = *ptr; *ptr--= *ptr1; *ptr1++ = tmp_char; } return result; }