itoa实现代码

 1 char* myitoa(int val, char* buf, int radix) 
 2 {
 3     int seed = radix-1;
 4     int move = 2;
 5     switch (radix)
 6     {
 7     case 2:
 8         move = 1; break;
 9     case 8:
10         move = 3; break;
11     case 16:
12         move = 4; break;
13     default:
14         move = 1;
15         break;
16     }
17     int tmpval = val, index=0;
18     while (tmpval) {
19         tmpval = tmpval >> move;
20         index += 1;
21     }
22     index -= 1;
23     while (val) {
24         int tmp_ret = val& seed;
25         val = val >> move;
26         char c;
27         if (tmp_ret > 9)
28             c = 'a' + tmp_ret - 10;
29         else c = tmp_ret + '0';
30         *(buf +(index--)) = c;
31     }
32     
33     return buf;
34 }
View Code

发现对于0的转换有问题 修改后的代码如下:

char* myitoa(int val, char* buf, int radix) 
{
    int seed = radix-1;
    int move = 2;
    switch (radix)
    {
    case 2:
        move = 1; break;
    case 8:
        move = 3; break;
    case 16:
        move = 4; break;
    default:
        move = 1;
        break;
    }
    int tmpval = val, index=0;
    do {
        tmpval = tmpval >> move;
        index += 1;
    } while (tmpval);
    index -= 1;
    do {
        int tmp_ret = val& seed;
        val = val >> move;
        char c;
        if (tmp_ret > 9)
            c = 'a' + tmp_ret - 10;
        else c = tmp_ret + '0';
        *(buf +(index--)) = c;
    }while (val);
    
    return buf;
}

 

posted @ 2020-12-17 14:01  巨龙岂是池中物  阅读(99)  评论(0)    收藏  举报