atoi以及itoa实现

来源:互联网 发布:语音网络 编辑:程序博客网 时间:2024/06/05 03:00

1, atoi

原型: int atoi(const char *nptr);

函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字(包括结束符 \0) 字符时停止转换,返回整型数。

复制代码
#include <stdio.h>#include <assert.h>static int atoi(const char* str){    int result = 0;    int sign = 0;    assert(str != NULL);    // proc whitespace characters    while (*str==' ' || *str=='\t' || *str=='\n')        ++str;    // proc sign character    if (*str=='-')    {        sign = 1;        ++str;    }    else if (*str=='+')    {        ++str;    }    // proc numbers    while (*str>='0' && *str<='9')    {        result = result*10 + *str - '0';        ++str;    }    // return result    if (sign==1)       return -result;    else       return result;} 
复制代码

2. itoa

char *itoaint value, char *string,int radix);

  原型说明:

  value欲转换的数据。

  string:目标字符串的地址。

  radix:转换后的进制数,可以是10进制、16进制等

复制代码
char *itoa(int val, char *buf, unsigned radix){    char   *p;                 char   *firstdig;          char   temp;               unsigned   digval;         p = buf;    if(val <0)    {        *p++ = '-';        val = (unsigned long)(-(long)val);    }    firstdig = p;     do{        digval = (unsigned)(val % radix);        val /= radix;               if  (digval > 9)            *p++ = (char)(digval - 10 + 'a');         else            *p++ = (char)(digval + '0');          }while(val > 0);       *p-- = '\0 ';             do{        temp = *p;        *p = *firstdig;        *firstdig = temp;        --p;        ++firstdig;            }while(firstdig < p);      return buf;}
0 0
原创粉丝点击