ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

strtol函数

2020-03-14 11:59:02  阅读:234  来源: 互联网

标签:strtol 字符 函数 pEnd 字符串 指针


strtol是一个C语言函数,包含在头文件:#include <stdlib.h>,在c++中则是头文件<cstdlib>

作用就是将一个字符串转换为长整型long,其函数原型为:

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

参数

str是要转换的字符串

endptr是指向第一个不可转换的字符位置的指针

base为基数,表示转换成为几进制的数

返回值

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

注意

base的值必须是2和36(含)之间或者是特殊值0。

  • 当 base 的值为 0 时,默认采用 10 进制转换,但如果遇到 '0x' / '0X' 前置字符则会使用 16 进制转换,遇到 '0' 前置字符则会使用 8 进制转换。
  • 如果base的值为2到36,则将字符串转换为base的值所对应的进制的整数。

若endptr 不为NULL,则会将遇到的不符合条件而终止的字符指针由 endptr 传回;若 endptr 为 NULL,则表示该参数无效,或不使用该参数。

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

如果str中的第一个非空格字符序列不是上述定义的有效整数,或者由于str为空或仅包含空白字符,则不执行转换。

如果str没有指向有效的C-字符串,或者如果endptr没有指向有效的指针对象,则会导致未定义的行为。但是这个函数从不抛出异常,在这种情况下,可能编译时并没有报错,但是生成的可执行文件无法正常运行。

示例

#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;
}

 总结

结合示例,对strtol函数进行总结。

这个函数从输入的第一个不为空白字符的数字或者加减号开始识别,并且在使用这个函数之前要定义一个字符指针,这个指针也并不需要赋初值。

这个函数的第一个参数是需要转化为长整型的字符串,第二个参数是之前使用的字符指针的地址(这是因为endptr的类型是char**),第三个参数是2到36的数或者是特殊值0,函数会将相应的数字字符串,按照第三个参数中指定的进制进行识别,比如在示例中,第一个数字字符串是2001,我们的第三个参数是10,那么函数就将这个字符串转化为长整型的2001。如果第三个参数是16,那么这个“2001”就会被当做16进制的数来识别,转化为长整型的8193。这个函数成功调用后返回转化后的长整型的数。同时字符指针指向第一个数之后的非数字的字符的地址。在这个示例中,当使用完第一次strtol之后,字符指针pEnd就指向了60c0c0前面的空白字符,同时将字符串“2001”转化为长整型的2001并作为返回值。而且我们可以直接把字符指针变量作为“裁剪”之后的变量来使用,我们在第二次使用这个函数时,第一个参数设为那个字符指针变量,函数就会将60c0c0按照16进制识别并转化为长整型。

参考

http://c.biancheng.net/cpp/html/129.html

https://www.sogou.com/link?url=DSOYnZeCC_q5oJxOlXo6ibs5nRzRLlPr4WIpmLwZg-4.

标签:strtol,字符,函数,pEnd,字符串,指针
来源: https://www.cnblogs.com/cyx-b/p/12491043.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有