strtoul函数简介

  • 1.函数原型
  • 2.功能描述
  • 3.所需头文件
  • 4.注意两点
  • 5.示例
  • 6.补充说明

================================================================================

1.函数原型

unsigned long int strtoul(const char *nptr, char **endptr, int base);
unsigned long long int strtoull(const char *nptr, char **endptr,int base);1、参数nptr:字符串的起始地址。2、参数endptr: 返回字符串有效数字的结尾地址。如 123456fe789 则返回数字f的地址。3、参数base:转化基数。   参数 base 范围从2 至36,或0。参数 base 代表 nptr 采用的进制方式,如 base 值为10 则采用 10 进制,若 base 值为16 则采用16 进制数等。

2.功能描述

convert a string to an unsigned long integer(把输入的字符串转换成数字).
strtoul() 会扫描参数nptr 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时(’\0’)结束转换,并将结果返回。

3.所需头文件

  #include <stdlib.h>

4.注意两点

1、当 base 的值为 0 时,默认采用 10 进制转换,但如果遇到 '0x' / '0X' 前置字符则会使用 16 进制转换,
遇到 '0' 前置字符则会使用 8 进制转换。2、若 endptr 不为NULL,则会将遇到的不符合条件而终止的字符指针由 endptr 传回;若 endptr 为 NULL,
则表示该参数无效,或不使用该参数。本文最后的范例没有展示 endptr 参数的使用,
你可以参考 strtol() 函数的范例来更加直观地了解 endptr 参数。

5.示例

实例一

输入字符串,base 的值为2,二进制转换。

#include <stdio.h>
#include <stdlib.h>
int main ()
{   char buffer [256];   unsigned long ul; char * endptr;while(1){printf ("Enter an unsigned number: ");  fgets (buffer, 256, stdin);   ul = strtoul (buffer, &endptr, 2);   printf ("Value entered: %lu ,the address of the first invalid character is %d ,invalid character=%s\n", ul,endptr,endptr);   system("pause"); }return 0;
}

测试结果:

实例二:
输入字符串,base 的值为10,十进制转换。

#include <stdio.h>
#include <stdlib.h>
int main ()
{   char buffer [256];   unsigned long ul; char * endptr;while(1){printf ("Enter an unsigned number: ");  fgets (buffer, 256, stdin);   ul = strtoul (buffer, &endptr, 10);   printf ("Value entered: %lu ,the address of the first invalid character is %d ,invalid character=%s\n", ul,endptr,endptr);   system("pause"); }return 0;
}

测试结果:

实例三:
输入字符串,base 的值为0的特殊情况。
1、当 base 的值为 0 时,默认采用 10 进制转换,但如果遇到 ‘0x’ / ‘0X’ 前置字符则会使用 16 进制转换,遇到 ‘0’ 前置字符则会使用 8 进制转换。
2、若 endptr 不为NULL,则会将遇到的不符合条件而终止的字符指针由 endptr 传回;若 endptr 为 NULL,则表示该参数无效,或不使用该参数。本文最后的范例没有展示 endptr 参数的使用,你可以参考 strtol() 函数的范例来更加直观地了解 endptr 参数。

#include <stdio.h>
#include <stdlib.h>
int main ()
{   char buffer [256];   unsigned long ul; char * endptr;while(1){printf ("Enter an unsigned number: ");  fgets (buffer, 256, stdin);   ul = strtoul (buffer, &endptr, 0);   printf ("Value entered: %lu ,the address of the first invalid character is %d ,invalid character=%s\n", ul,endptr,endptr);   system("pause"); }return 0;
}

测试结果:

————————————————
版权声明:本文为CSDN博主「海月汐辰」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_37858386/article/details/78458401

6.补充说明

strtol, strtoll, strtoul, strtoull
convert a string to a (signed, unsigned ) long integer string
声明:
#include<stdlib.h> ( 这个是C标准库,与linux无关。这套函数是通用的。)
long int strtol(const char *nptr, char **endptr, int base);
long long int strtoll(const char *nptr, char **endptr, int base);
unsigned long int strtoul(const char *nptr, char **endptr, int base);
unsigned long long int strtoull(const char *nptr, char **endptr, int base);
说明,第一个参数 nptr是要转化的字符串。第三个参数base说明nptr的进制。base 取值范围 0,2-36
这几个函数会忽略nptr前面的空格( ’ ‘, ‘\t’, ‘\n’ ‘\f’, ‘\v’ ‘\r’ ,由isspace判定为真的字符)
while (*nptr && isspace ( *nptr ) ) ++ nptr;
然后遇到非合法字符结束;
base = 2; 合法字符为0, 1
base = 3; 合法字符为0,1, 2

base = 11; 合法字符为0,1,…,9,a(A)

base = 36;合法字符为0, 1, …,9,a(A),…,z(Z)。
字符 a-z,是忽略大小写的,混着来也行,例如 strtol(“aA”, NULL, 11)依然能得到正确的结果。
函数的第二个参数endptr可以为空,如果不为空,则 endptr 保存函数结束前的那个非合法字符的地址。
如果没有合法字符,则 *endptr = nptr,函数返回0.
例如:
1.
char *endptr;
char nptr[]=“123abc”;
int ret = strtol(nptr, &endptr, 10 );
由于10进制里没有“数字”a,所以扫描到a,结束。
这样 ret = 123;
endptr = &nptr[3]; ( printf("%s", endptr);将得到字符串 abc )
2.
char nptr[]=" \n\t abc";
int ret = strtol(nptr, &endptr, 10 );
由于函数会忽略nptr前面的空格(’ ', ‘\n’…),所以,从字符a开始扫描,但是遇见的“第一个”即是不合法字符。
所以函数结束。 ret=0; endptr = nptr;
以下的讨论,会认为 nptr 前面没有空格,
即执行过类似于while (*nptr &&isspace ( *nptr ) ) ++ nptr;
如果base 为0.则分3种情况:
如果nptr 以0x(零x)开头,则把nptr当成16进制处理。
如果npstr以0(零)开头,则把nptr当成8进制处理。
否则,把nptr当成10进制。
对于函数执行错误,如传了一个非合法base,则errno会设置相关值

002-strtoul函数(输入字符串转换为数字)相关推荐

  1. Python不使用int()函数把字符串转换为数字

    Python不使用int()函数把字符串转换为数字 2018年05月21日 14:18:45 边缘ob边缘ob 阅读数:1035 https://blog.csdn.net/qq_33192555/a ...

  2. JavaScript 将字符串转换为数字 – JS 字符串转 Int 示例

    JavaScript 将字符串转换为数字 – JS 字符串转 Int 示例 "John Doe" -> String 'John Doe' -> String &quo ...

  3. c语言如何将字符转换为数字,C语言中一些将字符串转换为数字的函数小结

    C语言atoi()函数:将字符串转换成int(整数)头文件: #include atoi() 函数用来将字符串转换成整数(int),其原型为: int atoi (const char * str); ...

  4. 将字符串转换为数字的函数

    头文件:#include <stdlib.h> atoi() 函数用来将字符串转换成整数(int),其原型为: int atoi (const char * str); [函数说明]ato ...

  5. Oracle中将字符串转换为数字、to_number()函数的使用方法

    Oracle将字符串转换为数字 将char或者varchar2类型的String转换为数值类型的格式,需要注意的是,被转换的字符串必须符合数值类型格式,否则报错. 1.to_number()函数的使用 ...

  6. c++ascii码转换为数字_在C++中将字符串转换为数字

    有许多情况需要将数字转换为字符串或将字符串转换为数字.本文中提到了一些实现此任务的方法. 将字符串转换为数字 方法1:使用stringstream类或sscanf() 方法2:使用stoi()或ato ...

  7. 32.将字符串转换为数字

    32.将字符串转换为数字 题目描述 实现函数 atoi .函数的功能为将字符串转化为整数 提示:仔细思考所有可能的输入情况.这个问题没有给出输入的限制,你需要自己考虑所有可能的情况. 输入 " ...

  8. 在javascript中将字符串转换为数字的6种方法

    在javascript中,数字可以用两种不同的方式表示, 1.作为实际数字. 2. 作为字符串 . 很多时候,我们需要在javascript中将字符串转换为数字. 我们将看到6种不同的方法可以将字符串 ...

  9. C语言实现将字符串转换为数字的方法

    C语言提供了几个标准库函数,可以将字符串转换为任意类型(整型.长整型.浮点型等)的数字.以下是用atoi()函数将字符串转换为整数的一个例子: 代码如下: # include <stdio. h ...

最新文章

  1. 在使用添加按钮给table插入新的一行时遇见的问题总结及处理方法
  2. mysql数据库有几种删除方式_sql有几种删除表数据的方式
  3. 【攻防】Kubelet访问控制机制与提权方法研究
  4. 机器学习理论《统计学习方法》学习笔记:第二章 感知机
  5. [js高手之路]从零开始打造一个javascript开源框架gdom与插件开发免费视频教程连载中...
  6. 树-当前结点与列表页不符的处理
  7. 通过Zuul上传文件,禁用Zuul的Filters
  8. 网络matlab程序_【Matlab】官网资源盘点
  9. 不显示调用super_让不懂编程的人爱上iPhone开发(2017秋iOS11+Swift4+Xcode9版)-第11篇
  10. 二级域名是否可以随意设定_新老域名是否影响SEO优化收录排名?企业需要多域名做网站吗?...
  11. erp系统源码php_最新仿金蝶 PHP电商ERP进销存系统软件 带扫描功能
  12. 一篇就让你懂线程池原理
  13. beforeunload中阻止提示关闭_React 系统中,在离开编辑页面前做提示
  14. 浙江富商的24条至理经验
  15. SQL保姆级教程来了,0基础怎么快速上手sql?面试官会从哪些方面考sql?(看完你就能5天掌握SQL要点)...
  16. Learning RoI Transformer for Detecting Oriented Objects in Aerial Images
  17. 向武 清华大学 计算机,哥哥保送弟弟全市第二 双胞胎同时上清华(组图)
  18. mysql 主键 默认索引_mysql 主键和默认 设为索引的规则
  19. iphoneX的safari浏览器操作栏隐藏时兼容底部Home键
  20. python解析pdf文件_抽img_text(pymupdf)

热门文章

  1. ubuntu20.04开启远程桌面服务
  2. nodeName、nodeValue和nodeType节点介绍
  3. 1.11 Xcode右侧界面介绍 [原创iOS开发-Xcode教程]
  4. AIBigData训练营笔记四:Python爬取A股股票名称和代码
  5. 绝大多数程序员没有这么深入研究过System.out.println()!
  6. 前端和后端哪个工资高?做前端好还是做后端好?
  7. 定向计算机老师,核心素养背景下的信息技术教师定位走向
  8. libcurl入门之相关接口函数curl_global_init/cleanup
  9. tcga数据下载_零代码下载TCGA数据库第一期
  10. 这!就是数据安全-尚文网络xUP楠哥