strtoul函数的使用

strtoul函数的使用函数原型:参数1:字符串起始地址参数2:返回字符串有效数字的结束地址,这也是为什么要用二级指针的原因。参数3:转换基数。当base=0,自动判断字符串的类型,并按10进制输出,例如"0xa

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

函数原型:

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。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/166741.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 信号处理之父_信息与信号处理

    信号处理之父_信息与信号处理一、DFT之前言部分由于matlab已提供了内部函数来计算DFT、IDFT,我们只需要会调用fft、ifft函数就行;二、函数说明:fft(x):计算N点的DFT。N是序列x的长度,即N=len

    2022年8月6日
    5
  • Android之Activity生命周期浅析(一)「建议收藏」

    Android之Activity生命周期浅析(一)「建议收藏」Activity作为四大组件之一,出现的频率相当高,基本上我们在android的各个地方都能看见它的踪影,因此深入了解Activity,对于开发高质量应用程序是很有帮助的。今天我们就来详细地聊聊Activity的生命周期,以便我们在以后的开发中能如鱼得水。一、初识Activity  在日常应用中Activity是与用户交互的接口,它提供了一个用户完成相关操作的窗口。当我们在开发中创建Activit

    2022年8月16日
    5
  • trunk口设置vlan_wan口配置什么意思

    trunk口设置vlan_wan口配置什么意思trunk口和VLAN

    2022年10月28日
    0
  • Mit6.S081-实验1-Xv6 and Unix utilities

    Mit6.S081-实验1-Xv6 and Unix utilitiesMit6.S081-实验1-Xv6andUnixutilities前言一、Bootxv61,实验目的2,操作流程1)切换到xv6-labs-2020代码库的lab1分支2)启动xv63)测试xv64)过程分析5)其他操作二、在xv6中添加一个自己编写的程序1,源码准备2,编译配置3,测试添加程序4,过程分析三、xv6中shell简析前言一、Bootxv61,实验目的利用qemu启动xv62,操作流程1)切换到xv6-labs-2020代码库的lab1分支gitcheckoutut

    2022年9月26日
    0
  • pycharm2021linux 激活码【在线注册码/序列号/破解码】

    pycharm2021linux 激活码【在线注册码/序列号/破解码】,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月20日
    71
  • 苹果绕id工具_绕ID教程(iOS13.313.3.1)[通俗易懂]

    苹果绕id工具_绕ID教程(iOS13.313.3.1)[通俗易懂]前几期,我已经第一时间将绕ID教程给我的粉丝奉上,当然我也会一直做这个事情,由于越狱软件的不支持,所以导致iOS13.3以上是不能成功绕过ID锁的,所以今天给大家上一个适合iOS13.3,以及13.3.1。这个教程不如前一个教程那么简单,可能小白用起来会有些困难,但我依然致力于尽量简洁明白的说给大家听,一步步作你就会成功。一、越狱(苹果系统下完成):手机越狱工具Checkra1n0.9….

    2022年4月19日
    2.5K

发表回复

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

关注全栈程序员社区公众号