转的一个itoa实现(效率很高,并且能够正确处理INT_MIN)

下面是网上找的一个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;
    }
原文地址:https://www.cnblogs.com/isaiah/p/2733225.html