c语言atoi函数求助

2024-10-29 14:18:49
推荐回答(1个)
回答1:

abcd转换数值? 你是要做16进制的吗?

一般atoi只是转换10进制的 不包括16进制

如果你要支持16进制 可以自行增加一个前导符 比较常用的是x

即如果字符串第一个字符为x 则表示改字符串为16进制形式 

判断和你现有的符号判断类似,处理数据的时候不能用isdigit判断 而是要加入a-f的判断


计算的时候 10*n改成16*n


简单的例子 

int atoi(char s[])
   {
       int i, n, sign;

       for (i = 0; isspace(s[i]); i++)  /* skip white space */
           ;
       if(s[i] == 'x')/*hex*/
       {
           i ++;
           for (n = 0; isdigit(s[i]) || (s[i]>='a' && s[i] <= 'f'); i++)
           {
               if(isdigit(s[i]))
                   n = 16 * n + (s[i] - '0');
               else
                   n = 16 * n + (s[i] - 'a')+10; 
           }
           return n;
       }
       sign = (s[i] == '-') ? -1 : 1;
       if (s[i] == '+' || s[i] == '-')  /* skip sign */
           i++;
       for (n = 0; isdigit(s[i]); i++)
           n = 10 * n + (s[i] - '0');
       return sign * n;
   }