翻了翻旧代码,发现以前对strtol这个函数不太了解,特此分析一下。

C 库函数strtol原型为:

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

其运行过程为:

把参数 str 所指向的字符串根据给定的 base 转换为一个长整数(类型为 long int 型),并将该长整数转换为十进制数返回,如果没有符合的结果,则返回一个0值;

base 必须介于 2 和 36(包含)之间,或者是特殊值 0;

str中不符合base的部分存储于*endptr中。

----------------------------------------------------------------------------------------------------------------------------------------

我们来看一下实例:

#include <iostream>
using namespace std;
int main() {char buffer[20]="112233abc11";char *endptr;cout << "初始字符串为:" << buffer << "\n" << endl;long result = strtol(buffer, &endptr, 2);cout << "符合的结果并转换为十进制数result: "<< result << "\t, 余下的字符串endptr: " << endptr << endl;return 0;
}

输出结果为:

初始字符串为:112233abc11

符合的结果并转换为十进制数result: 3     , 余下的字符串endptr: 2233abc11

即符合base为2条件的只有0和1,所以通过函数我们得到11,函数将11转为十进制数得到3返回给result,余下的字符串存储到endptr中,其它情况依此类推。

base的筛选条件(抄录自zxx2096的博客:strtol()详解):

当base为2时,合法字符为‘0’,‘1’;

base为8时,合法字符为‘0’,‘1’,……‘7’;

base为10时,合法字符为‘0’,‘1’,……‘9’;

base 为16时,合法字符为‘0’,‘1’,……‘9’,‘a’,……‘f’;

base为24时,合法字符为‘0’,……‘9’,‘a’,……‘n’,

base为36时,合法字符为‘0’,……‘9’,‘a’,……‘z’;等等。

其中,不区分大小写,比如,‘A’和‘a’会都会被转化为10。

到此,应该对该函数的使用较为清晰了吧。

C/C++之strtol函数详解相关推荐

  1. C库函数之 strtol函数详解

    strtol函数详解 函数声明 base为0的情况 endptr的妙用 函数声明 long int strtol (const char* str, char** endptr, int base); ...

  2. strtol 函数详解

    样题: POJ 2105 +----------------+ |      strtol             | +----------------+ i.e. string to long l ...

  3. C语言网络编程:accept函数详解

    文章目录 前言 函数描述 代码实例 如何得到客户端的IP 和 端口号 前言 当使用tcp服务器使用socket创建通信文件描述符,bind绑定了文件描述符,服务器ip和端口号,listen将服务器端的 ...

  4. 【FFmpeg】函数详解(三)

    FFmpeg函数详解 14.av_write_frame 15.av_interleaved_write_frame 16.av_write_trailer 17.avio_close 18.av_i ...

  5. 【FFmpeg】函数详解(二)

    FFmpeg函数详解 9.av_dump_format 10.avio_open 11.avformat_write_header 12.avcodec_send_frame 13.avcodec_r ...

  6. 【FFmpeg】函数详解(一)

    FFmpeg函数详解 一.错误码相关 1.AVERROR 2.av_strerror 3.其他错误码解释 二.编解码 1.获取编解码器 2.申请.释放上下文环境 3.打开编码器avcodec_open ...

  7. 【ES6】Generator函数详解

    [ES6]Generator函数详解 一.Generator函数简介 基本概念 函数写法 yield关键字介绍 二.next方法的参数 三.for...of循环 四.关于普通throw()与Gener ...

  8. mysql的聚合函数综合案例_MySQL常用聚合函数详解

    一.AVG AVG(col) 返回指定列的平均值 二.COUNT COUNT(col) 返回指定列中非NULL值的个数 三.MIN/MAX MIN(col):返回指定列的最小值 MAX(col):返回 ...

  9. python平方数迭代器_对python中的高效迭代器函数详解

    python中内置的库中有个itertools,可以满足我们在编程中绝大多数需要迭代的场合,当然也可以自己造轮子,但是有现成的好用的轮子不妨也学习一下,看哪个用的顺手~ 首先还是要先import一下: ...

最新文章

  1. velocity 的 escape实现
  2. 细节决定成败—关于.net的.dll.refresh文件
  3. youcans 的 OpenCV 学习课—8.频率域图像滤波(上)
  4. iOS推送(利用极光推送)
  5. batch spring 重复执行_spring-batch – Spring批处理:重新启动作业,然后自动启动下一个作业...
  6. centos安装输入法
  7. TP5路由知识简单个人汇总
  8. Qt网络编程-简易版TcpServer入门Demo(2)
  9. Appium下载及环境搭建
  10. 更新i40e网卡驱动程序
  11. Android开发中的常用库
  12. mysql身份证校验码_javascript身份证验证代码
  13. [爬虫系列(三)]用多线程爬取百度贴吧默认表情
  14. NC:恢复菌群多样性或能降低耐药性
  15. 【重点:线程池续】超人气组合:Callable和Future
  16. python随手记自动记账_菜鸟也疯狂!8分钟用Python做一个酷炫的家庭随手记
  17. CAD文件怎么转成低版本?教你两个小妙招
  18. 程序员面试 10 大潜规则,千万不要踩坑!
  19. python 判断天干地支年份
  20. 力控 串口服务器 虚拟串口,M4系列串口服务器与力控组态软件MODBUS TCP 协议通信...

热门文章

  1. Linux将文件压缩成tgz格式,以及将tgz格式解压
  2. Android Stdio从一个界面跳转到另一个界面
  3. 苹果cmsv10仿MK影视自适应模板
  4. 北邮学报pk计算机科学,211大学对比:选择北京邮电大学还是中国传媒好?
  5. 未来对于35岁以后程序员的职业规划
  6. Matlab常见报错:错误使用 conv2不支持 N 维数组;cell类型数组不支持运算符
  7. oracle正确卸载步骤,转自yuxuan_08
  8. TXT文件怎么转换成PDF这种格式?分享给大家三个方法!
  9. pikachu-rce
  10. 大学计算机科学与技术当兵,2021女孩想大学当兵报什么专业好