zoukankan      html  css  js  c++  java
  • strtoul函数的使用

    函数原型:

    unsigned long strtoul(const char *nptr,char **endptr,int base )

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

    1. static unsigned int simple_guess_base(const char *cp)  
    2. {  
    3.     if (cp[0] == '0') {  
    4.         if (TOLOWER(cp[1]) == 'x' && isxdigit(cp[2]))  
    5.             return 16;  
    6.         else  
    7.             return 8;  
    8.     } else {  
    9.         return 10;  
    10.     }  
    11. }  
    12.   
    13. unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base)  
    14. {  
    15.     unsigned long result = 0;  
    16.   
    17.     if (!base)  
    18.         base = simple_guess_base(cp);  
    19.   
    20.     if (base == 16 && cp[0] == '0' && TOLOWER(cp[1]) == 'x')  
    21.         cp += 2;  
    22.   
    23.     while (isxdigit(*cp)) {  
    24.         unsigned int value;  
    25.   
    26.         value = isdigit(*cp) ? *cp - '0' : TOLOWER(*cp) - 'a' + 10;  
    27.         if (value >= base)  
    28.             break;  
    29.         result = result * base + value;  
    30.         cp++;  
    31.     }  
    32.   
    33.     if (endp)  
    34.         *endp = (char *)cp;  
    35.     return result;  
    36. }  

    函数分析:
    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。

  • 相关阅读:
    Java编程技术之浅析SPI服务发现机制
    Java编程开发之浅析Java引用机制
    xmake v2.5.5 发布,支持下载集成二进制镜像包
    C/C++ 构建系统,我用 xmake
    xmake v2.5.3 发布,支持构建 linux bpf 程序和 Conda 包集成
    xmake v2.5.2 发布, 支持自动拉取交叉工具链和依赖包集成
    程序员是怎么存档并管理文件版本的?
    《大厂程序员春招实习面试漫画》第一集:基础面试
    漫画解释啥是云计算
    程序员,这个需求你是真实现不了吗?
  • 原文地址:https://www.cnblogs.com/Caden-liu8888/p/7718474.html
Copyright © 2011-2022 走看看