淘先锋技术网

首页 1 2 3 4 5 6 7
/* 参数:
 *      arr: 接收一个数组或者已经分配内存的char指针
 *
 *      arr_size: arr所指向的地址所分配的长度,长度不够会导致截断
 *
 *      num: 需要转换的数字,范围通常是-2147483648~2147483647, 详情参见<litmits.h>的INT_MAX
 *
 * 返回值:
 *      成功执行,则返回填充的字节数, 不包括'\0', 如果num是一个负数,那么包括负号'-'
 *
 *      执行失败,则返回一个负数,如下:
 *                                      -1 : arr_size传入错误
 *
 * 欢迎反馈BUG或者提建议
 *
 */
 
int int_to_char(char *arr, int arr_size, int num)
{
        if(arr_size <= 0)
        return -1;

        int i=0;
        /*待填充字符的下标*/

        int symbol = 1;
        int base = 1;

        if(num < 0){
                *(arr+0)='-';
                i++;
                symbol = -1;
        }

                while(num/base >= 10 || num / base <= -10)
                        base *= 10;
                /* 计算num的基数base, 例如:
                 * num = 0  , base = 1;
                 * num = 112, base = 100;
                 * num = -3400, base = 1000;
                 */

                for(; i < arr_size - 1 && base != 0; i++){
                        *(arr+i) = (num / base)*symbol + 48;
                        num    %= base;
                        base   /= 10;
                }
        *(arr+i) = '\0';
        return i;
}