Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >strtoul函数的使用

strtoul函数的使用

作者头像
全栈程序员站长
发布于 2022-09-16 09:51:12
发布于 2022-09-16 09:51:12
74400
代码可运行
举报
运行总次数:0
代码可运行

函数原型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
C/C++之string类小结
C++提供了三种方法可以将C++字符串转化为C字符串,分别是data(),c_str(),copy()成员函数来实现。
用户7886150
2021/02/15
5070
strtol函數的用法
相关函数: atof, atoi, atol, strtod, strtoul 表头文件: #include <stdlib.h> 定义函数: long int strtol(const char *nptr, char **endptr, int base) 函数说明: strtol()会将参数nptr字符串根据参数base来转换成长整型数。参数   base范围从2至36,或0。参数base代表采用的进制方式,如base值为10则采用10   进制(字符串以10进制表示),若base值为16则采用16进制(字符串以16进制表示)   。当base值为0时则是采用10进制做转换,但遇到如''0x''前置字符则会使用16进   制做转换。一开始strtol()会扫描参数nptr字符串,跳过前面的空格字符,直到   遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(''\0'')结束   转换,并将结果返回。若参数endptr不为NULL,则会将遇到不合条件而终止的   nptr中的字符指针由endptr返回。 返回值:    返回转换后的长整型数,否则返回ERANGE并将错误代码存入errno中   。 附加说明: ERANGE指定的转换字符串超出合法范围。     将字符串a, b, c 分别采用10, 2, 16进制转换成数字 ------------------------------------------------ #include <stdlib.h> #include <stdio.h> main() {      char a[] = "100";      char b[] = "100";      char c[] = "ffff";      printf("a = %d\n", strtol(a, NULL, 10)); //100      printf("b = %d\n", strtol(b, NULL, 2));    //4      printf("c = %d\n", strtol(c, NULL, 16)); //65535 }   "100" ---> 100 (Dec) ---> 100 (Dec) "100" ---> 100 (BIN) ---> 4    (Dec) "ffff"---> ffff(Hex) ---> 65535(Dec)
用户7886150
2021/02/15
6880
C语言常用字符串操作函数整理(详细全面)
功能:   从标准输入读入字符,并保存到s指定的内存空间,直到出现换行符或读到文件结尾为止 参数:   s:字符串首地址 返回值:   成功:读入的字符串   失败:NULL
嵌入式与Linux那些事
2021/05/20
4.1K0
C++常用的函数
通常,在程序设计中,我们会发现一些程序段在程序的不同地方反复出现,此时可以将这些程序段作为相对独立的整体,用一个标识符给它起一个名字,凡是程序中出现该程序段的地方,只要简单地写上标识符即可。这样的程序段,我们称之为子程序(函数)。下面介绍一下C++提供的各种标准函数。
用户7886150
2021/02/11
1.6K0
c++常用库函数整理总结
返回值:如果 c 在 A~Z、a~z 或0~9的范围内,则返回一个非0值;否则返回0。
用户7886150
2021/02/11
1.6K0
POJ1331 Multiply(strtol函数练习)
题目链接:http://poj.org/problem?id=1331 主要介绍strtol函数: long int strtol(const char *nptr,char **endptr,int
瑾诺学长
2018/09/21
5170
3 年大厂工作经验面试竟然要我手写 atoi 函数
手写代码是面试过程常见的环节之一,但是一般都是手写算法题,此次面试官要我手写一个基本的 C 语言 atoi,内心一惊,这怎么感觉像是校招…
恋喵大鲤鱼
2020/06/18
1.4K0
c++ 常用函数
#include <strstrea.h>   //该类不再支持,改用<sstream>中的stringstream
用户7886150
2021/02/05
7200
C语言_函数【转】
引用地址:http://baike.baidu.com/link?url=U9h6MccLYX2w5uyVOqIFd3eps5gR2FZA10jYRLRnc66Ff_F5ZrmXGKA12DT-_2x
landv
2018/05/24
4.9K0
函数strtol和strtok详解[通俗易懂]
long int strtol(const char *nptr, char **endptr, int base);
全栈程序员站长
2022/09/14
1K0
C语言标准库函数大全(ctype、time 、stdio、stdlib、math、string)
上面只是简单的介绍函数原型和功能,如果想对函数进一步了解可以下载以下文档 (内含详解与实例):
全栈程序员站长
2022/09/13
5.8K0
C语言标准库函数大全(ctype、time 、stdio、stdlib、math、string)
C++数值类型与string的相互转换
std命令空间下有一个C++标准库函数std::to_string(),可用于将数值类型转换为string。使用时需要include头文件<string>。
恋喵大鲤鱼
2018/08/03
10K0
C99标准里的inttypes.h头文件
其中的PRIu32是什么意思?上网搜了一下才知道是C99标准里新引入的宏定义,如下:
用户7886150
2021/02/20
1.6K0
strtol函数 将字符串转换为相应进制的整数
+----------------+ |   strtol   | +----------------+ i.e. string to long long int strtol(const char *nptr, char **endptr, int base) strtol()会将nptr指向的字符串,根据参数base,按权转化为long int, 然后返回这个值。 参数base的范围为2~36,和0;它决定了字符串以被转换为整数的权值。 可以被转换的合法字符依据base而定,举
marsggbo
2018/01/23
3.3K0
C++标准库中的数学函数
http://blog.sina.com.cn/s/blog_149e9d2ec0102wxqt.html
用户7886150
2021/02/12
1.4K0
字符函数和字符串函数
字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包 含 '\0' )。 参数指向的字符串必须要以 '\0' 结束。 注意函数的返回值为size_t,是无符号的( 易错 ) 学会strlen函数的模拟实现
绝活蛋炒饭
2024/12/16
1060
字符函数和字符串函数
C++ 常见进制转换代码
目录 C++ 进制转换代码记录 一丶进制转换 1.1 介绍 二丶 十六进制字符串转换为Ascii 2.1 方法1 Char类型操作 2.2 方法2 STL String操作 2.3 方法3 google写法 2.4 总结 三丶Ascii字符串转为16进制字符串 3.1 方法1 字符指针类型转换 四丶十六进制字符转为整数 4.1 方法1 字符转为整数 五丶十六进制字符串转为二进制 5.1 十六进制字符串转为二进制类型 5.2 二进制类型十六进制转为十六进制字符串 六丶10进制数字转为16进制字符串 6.1方法
IBinary
2022/05/13
2.2K0
C语言从入门到实战——常用字符函数和字符串函数的了解和模拟实现
字符函数是用来处理单个字符的函数,比如查找、替换、转换大小写、比较等操作。常用的字符函数包括:
鲜于言悠
2024/03/20
2640
C语言从入门到实战——常用字符函数和字符串函数的了解和模拟实现
c++刷题常用技巧
记录常用的好用的c++刷题技巧以及方法的库函数 严格遵顼 ANSI-C 标准 技巧 库函数
用户7886150
2021/02/10
6980
c语言中char转换成string_字符数字转为int型
*********************************** linux c ***********************************
全栈程序员站长
2022/11/10
3.2K0
相关推荐
C/C++之string类小结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档