转自:http://www.jb51.net/article/71463.htm



C语言strtol()函数:将字符串转换成long(长整型数)

头文件:

1
#include <stdlib.h>

strtol() 函数用来将字符串转换为长整型数(long),其原型为:

1
long
int
strtol
(
const
char
* str, char** endptr,
int base);

【参数说明】str 为要转换的字符串,endstr 为第一个不能转换的字符的指针,base 为字符串 str 所采用的进制。

【函数说明】strtol() 会将参数 str 字符串根据参数 base 来转换成长整型数(long)。参数 base 范围从2 至36,或0。参数base 代表 str 采用的进制方式,如base 值为10 则采用10 进制,若base 值为16 则采用16 进制等。

strtol() 会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。

两点注意:

  1. 当 base 的值为 0 时,默认采用 10 进制转换,但如果遇到 '0x' / '0X' 前置字符则会使用 16 进制转换,遇到 '0' 前置字符则会使用 8 进制转换。
  2. 若endptr 不为NULL,则会将遇到的不符合条件而终止的字符指针由 endptr 传回;若 endptr 为 NULL,则表示该参数无效,或不使用该参数。

【返回值】返回转换后的长整型数;如果不能转换或者 str 为空字符串,那么返回 0(0L);如果转换得到的值超出 long int 所能表示的范围,函数将返回 LONG_MAX 或 LONG_MIN(在 limits.h 头文件中定义),并将 errno 的值设置为 ERANGE。

【示例】将字符串转换成10进制。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>
#include <stdlib.h>
int
main ()
{
char
szNumbers[] = "2001 60c0c0 -1101110100110100100000 0x6fffff";
char
* pEnd;
long
int li1, li2, li3, li4;
li1 =
strtol (szNumbers,&pEnd,10);
li2 =
strtol (pEnd,&pEnd,16);
li3 =
strtol (pEnd,&pEnd,2);
li4 =
strtol (pEnd,NULL,0);
printf
("转换成10进制: %ld、%ld、%ld、%ld\n", li1, li2, li3, li4);
system("pause");
return
0;
}

执行结果:

转换成10进制:

1
2001、6340800、-3624224、7340031

C语言strtoul()函数:将字符串转换成unsigned long(无符号长整型数)

头文件:

1
#include <stdlib.h>

strtoul() 函数源自于“string to unsigned long”,用来将字符串转换成无符号长整型数(unsigned long),其原型为:

1
unsigned long
strtoul (const
char* str, char** endptr,
int base);

【参数说明】str 为要转换的字符串,endstr 为第一个不能转换的字符的指针,base 为字符串 str 所采用的进制。

【函数说明】strtoul() 会将参数 str 字符串根据参数 base 来转换成无符号的长整型数(unsigned long)。参数 base 范围从2 至36,或0。参数 base 代表 str 采用的进制方式,如 base 值为10 则采用10 进制,若 base 值为16 则采用16 进制数等。

strtoul() 会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,再遇到非数字或字符串结束时('\0')结束转换,并将结果返回。

两点注意:

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

【返回值】返回转换后的无符号长整型数;如果不能转换或者 str 为空字符串,那么返回 0;如果转换得到的值超出unsigned long int 所能表示的范围,函数将返回 ULONG_MAX(在 limits.h 头文件中定义),并将 errno 的值设置为 ERANGE。

温馨提示:ANSI C 规范定义了 stof()、atoi()、atol()、strtod()、strtol()、strtoul() 共6个可以将字符串转换为数字的函数,大家可以对比学习。另外在 C99 / C++11 规范中又新增了5个函数,分别是 atoll()、strtof()、strtold()、strtoll()、strtoull(),在此不做介绍,请大家自行学习。

范例:将输入的字符串转换为无符号长整型。

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
int
main ()
{
char
buffer [256];
unsigned
long ul;
printf
("Enter an unsigned number: ");
fgets
(buffer, 256, stdin);
ul =
strtoul (buffer, NULL, 0);
printf
("Value entered: %lu.\n", ul);
system("pause");
return
0;
}

运行结果:

1
2
Enter an unsigned number: 017cyuyan
Value entered: 15.

由于 base 参数被设置为 0 并且字符串“017cyuyan”以“0”开头,所以采用 8 进制转换。

最新文章

  1. zookeeper选举原理
  2. Android自动化测试 - Robotium之Robotium在不同分辨率下clickonview不支持解决方案
  3. SQL脚本--有关压缩数据库日志
  4. CentOS下MySQL忘记root密码解决方法【转载】
  5. Codeforces Educational Codeforces Round 3 A. USB Flash Drives 水题
  6. CrossDomain.xml的作用及其简单用法
  7. Python之路【第十篇】:HTML -暂无等待更新
  8. Redis配置不当可导致服务器被控制,已有多个网站受到影响 #通用程序安全预警#
  9. 某APK中使用了动态注册BroadcastReceiver,Launcher中动态加载此APK出现java.lang.SecurityException异常的解决方法
  10. 非阻塞IO
  11. ReactJs入门思路
  12. python3 request模块初使用
  13. Echarts扩展地图文字位置错乱的问题
  14. PYTHON 实现的微信跳一跳【辅助工具】仅作学习
  15. MySQL-01-基础
  16. 【VS2015】链接器错误link2001
  17. Period kmp
  18. Redis实战总结-Redis的高可用性
  19. storm的流分组
  20. Scala的控制结构和函数

热门文章

  1. hibernate QBC查询
  2. 你的JVM还好吗?GC初步诊断
  3. 多媒体开发之---live555的多线程支持,原本只是单线程,单通道
  4. activemq 安装-单点
  5. 五个知识体系之-SQL学习-第四天
  6. 九度OJ 1075:斐波那契数列 (数字特性)
  7. Tomcat学习笔记【5】--- 项目部署详解
  8. php总结6——自定义函数、引用传值
  9. web项目中从不同的路径读取文件
  10. Java for LeetCode 122 Best Time to Buy and Sell Stock II