strtoull 函数,strtol函数用法

函数原型:

unsigned long strtoulconst char *nptr,char **endptr,int base )

参数1:字符串起始地址
参数2:返回字符串有效数字的结束地址,这也是为什么要用二级指针的原因。
参数3:转换基数。当base=0,自动判断字符串的类型,并按10进制输出,例如”0xa”,就会把字符串当做16进制处理,输出的为10。更多的下面详细阐述。

static unsigned int simple_guess_baseconst char *cp)  {      if cp[0] == ‘0’) {          if TOLOWERcp[1]) == ‘x’ && isxdigitcp[2]))              return 16;          else              return 8;      } else {          return 10;      }  }    unsigned long simple_strtoulconst char *cp, char **endp, unsigned int base)  {      unsigned long result = 0;        if !base)          base = simple_guess_basecp);        if base == 16 && cp[0] == ‘0’ && TOLOWERcp[1]) == ‘x’)          cp += 2;        while isxdigit*cp)) {          unsigned int value;            value = isdigit*cp) ? *cp – ‘0’ : TOLOWER*cp) – ‘a’ + 10;          if value >= base)              break;          result = result * base + value;          cp++;      }        if endp)          *endp = char *)cp;      return result;  }  

函数分析:
1 simple_strtoul()函数里的第一个if语句,如果base=0,自动对字符串里的数字格式进行分析,并返回基数,其值可取8、16、10。第二个if语句,进一步对16进制数处理,是cp指向第三个字符。

2     while循环条件:判断是否为可处理的字符,其处理范围为‘0’-‘9’,‘a’-‘f,‘A’-‘F’。
       循环体内:如果*cp为数字则value=*cp-‘0’;如果*cp为字符value=*cp-’a‘+10。
       判断value的值,如果value>=base,表明其值超过了基数,是一个不合法的数字,跳出循环。例如基数base=3, 数码符号为0,1,2,3。 此时value=4时就不是一个数码符号。

3     处理尾指针,使其指向字符串有效数字的结束地址。

4 返回result。

转载于:https://www.cnblogs.com/Caden-liu8888/p/7718474.html

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注