前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >strtoul函数的使用

strtoul函数的使用

作者头像
全栈程序员站长
发布2022-09-16 17:51:12
5810
发布2022-09-16 17:51:12
举报

函数原型:

代码语言:javascript
复制
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. unsigned long simple_strtoul(const char *cp, char **endp, unsigned int base)
  13. {
  14. unsigned long result = 0;
  15. if (!base)
  16. base = simple_guess_base(cp);
  17. if (base == 16 && cp[0] == ‘0’ && TOLOWER(cp[1]) == ‘x’)
  18. cp += 2;
  19. while (isxdigit(*cp)) {
  20. unsigned int value;
  21. value = isdigit(*cp) ? *cp – ‘0’ : TOLOWER(*cp) – ‘a’ + 10;
  22. if (value >= base)
  23. break;
  24. result = result * base + value;
  25. cp++;
  26. }
  27. if (endp)
  28. *endp = (char *)cp;
  29. return result;
  30. }

函数分析: 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.cn/166741.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档