strtol函数详解

  • 函数声明
  • base为0的情况
  • endptr的妙用

函数声明

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

参数1:str——字符串,函数会从合法的字符开始识别,之前的空格字符会被跳过,合法字符串会被转换为long int, 作为函数的返回值。
参数2:endptr——字符指针的地址,如果该参数非NULL,则保存一个指向转换值后面的第一个指针。这个指针方便对字符串剩余的部分进行处理。
参数3:base——转换所执行的基数,说人话就是,base将决定以多少进制来看待str里的字符串。

base值的可选范围:0和2~36。

如果base为2,合法的字符就是’0’,‘1’。
对于base11到36,字母A~Z将被解释为数值10到35。
如果base为16,那么合法字符为’0’~‘9’,‘a’,‘b’,‘c’,‘d’,‘e’,‘f’。

总结:
该函数首先丢弃必要的空格字符,直到找到第一个非空格字符。然后,从这个字符开始,根据依赖于base取尽可能多的有效字符,并将它们解释为十进制数值。最后,一个指向str中整数表示后第一个字符的指针存储在endptr所指向的对象中。
例1

int main()
{char buffer[] = "   0110";int i = strtol(buffer, NULL, 2);printf("%d\n",i);
}

输出:

字符串前置的空格将会被跳过,然后根据2进制只识别字符’0’,‘1’。然后转换为10进制。


例2:

int main()
{char buffer[] = "   a0110";int i = strtol(buffer, NULL, 2);printf("%d\n",i);
}

输出:

不能执行有效的转换,返回0。


例3

int main()
{char buffer[] = "1033a";char* stop;int i = strtol(buffer, &stop, 2);printf("%d\n",i);printf("%s\n",stop);
}


例4

int main()
{char buffer[] = "ffg";char* stop;int i = strtol(buffer, &stop, 16);printf("%d\n",i);printf("%s\n",stop);
}

base为0的情况

如果base为0,一般情况下是以十进制识别str中合法的字符,即’0’-‘10’。

但是有两个特殊情况,
当字符串的前缀为0,base为0情况下,则与base=8的情况一样,以八进制转换字符串中的合法字符。

如果str前缀不是0,则base=0和base=10的结果是一样的

同理,如果前缀为0x(0X),则base=0和base=16效果是一样的

没有前缀,则base=0视为base=10

此时,对于十进制来说,'f’是无法识别的。
注意:当base>=34时,前缀0x中的字符’x’会被识别成数值33。

endptr的妙用

可将各类2~36进制数,转换为10进制

int main()
{char buffer[] = "1010 77 ff z";char* stop=buffer;int i1 = strtol(stop, &stop, 2);int i2 = strtol(stop, &stop, 8);int i3 = strtol(stop, &stop, 16);int i4 = strtol(stop, &stop, 36);printf("十进制表示为:%d,%d,%d,%d", i1, i2, i3, i4);return 0;
}

C库函数之 strtol函数详解相关推荐

  1. 【C库函数】qsort函数详解

    目录 qsort ​ 函数基本原型 参数解读 函数详解 比较函数实现并解读 qsort函数排序代码实现并展示结果 1.排序整型数组 2.排序结构体 qsort 函数是基于快速排序算法实现的一个排序函数 ...

  2. 【C库函数】strncpy函数详解

    目录 strncpy 函数原型 参数讲解 返回值讲解 函数讲解 (1)一般使用场景 (2)特殊使用场景(错误) strncpy         拷贝n个字符到目标字符串中 函数原型 char *str ...

  3. C/C++之strtol函数详解

    翻了翻旧代码,发现以前对strtol这个函数不太了解,特此分析一下. C 库函数strtol原型为: long int strtol(const char *str, char **endptr, i ...

  4. 【C库函数】strerror函数详解

    目录 strerror 函数原型 参数详解 返回值详解 函数讲解 strerror 返回错误码,所对应的错误信息 函数原型 char *strerror( int errnum ); 参数详解 参数 ...

  5. 【C库函数】 strstr函数详解

    目录 strstr 函数原型 参数详解 返回值详解 函数讲解 strstr 查找字符子串 函数原型 char *strstr( const char *str1, const char *str2 ) ...

  6. 【C库函数】strlen函数详解

    目录 strlen ​ 函数基本原型 参数解读 返回值详解 函数用法详解 strlen 获得字符串的长度(string length)  函数基本原型 size_t strlen( const cha ...

  7. 【C库函数】strcat函数详解

    目录 strcat 函数原型 参数讲解 返回值详解 函数讲解 (1)源字符串和目标字符串都必须以'\0'结束 (2)目标空间必须足够大,能容纳下源字符串的内容 (3)目标空间必须可修改 strcat ...

  8. strtol 函数详解

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

  9. 【C库函数】memcpy函数详解

    目录 memcpy 函数原型 参数讲解 返回值讲解 函数讲解(三个注意点) memcpy 拷贝内存块到目标空间 函数原型 void *memcpy( void *dest, const void *s ...

最新文章

  1. 面试官问你想找什么工作_找工作时如何面试面试官
  2. 修完 Bug 后脑袋灵光一现 | 每日趣闻
  3. C/C++ 中访问结构体成员的方法
  4. 045_CSS3过渡
  5. import lombok 报错_lombok
  6. 自定义一个SharedPreferences工具类
  7. Numpy基础(part1)--ndarray数组
  8. 读博和不读博的理由是什么?
  9. mysql工作表格制作教程_Access制作复杂报表
  10. poj2942(双联通分量,交叉染色判二分图)
  11. 2018-6-19bash编程之循环
  12. jquery.eq()
  13. Python标准类型的分类
  14. python垃圾回收机制gcgo_python垃圾处理机制
  15. 电机轴承的检查和安装方法
  16. C语言——输入输出格式
  17. PS教程:紫色光晕效果实现
  18. 西瓜书第一第二章理解
  19. 如何根据vin码查询_汽车VIN码是什么,怎么查询Vin码?
  20. 哈工大计算机网络MOOC作业题解答

热门文章

  1. 利用R语言解压与压缩 .tar.gz .zip .gz .bz2 等文件
  2. lammps教程:hcp类型晶格建模缺陷及解决方案
  3. win2012文件服务器添加角色,win2012系统无法添加角色处理教程
  4. 一个针对巴勒斯坦地区进行攻击的APT组织最新活动和相关性分析
  5. 微信支付-chooseWXPay:fail, the permission value is offline verifying
  6. 基于JAVA物资物流管理系统计算机毕业设计源码+系统+lw文档+部署
  7. netty 工控网关_开源纯C#工控网关+组态软件(九)定制Visual Studio
  8. LeetCode刷题-独一无二的出现次数
  9. 【工作计划】6.11-6.15
  10. 烈火如歌手游找回服务器,烈火如歌手游完美还原剧中场景