当前位置: 首页 > 编程笔记 >

浅析C语言中strtol()函数与strtoul()函数的用法

周涵畅
2023-03-14
本文向大家介绍浅析C语言中strtol()函数与strtoul()函数的用法,包括了浅析C语言中strtol()函数与strtoul()函数的用法的使用技巧和注意事项,需要的朋友参考一下

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

#include <stdlib.h>

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

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进制。

#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进制:

2001、6340800、-3624224、7340031

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

#include <stdlib.h>

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

  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(),在此不做介绍,请大家自行学习。

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

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

运行结果:

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

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

 类似资料:
  • 本文向大家介绍浅析C/C++中sort函数的用法,包括了浅析C/C++中sort函数的用法的使用技巧和注意事项,需要的朋友参考一下 sort是STL中提供的算法,头文件为#include<algorithm>以及using namespace std; 函数原型如下: 使用第一个版本是对[first,last)进行升序排序,默认操作符为"<",第二个版本使用comp函数进行排序控制,comp包含两

  • 本文向大家介绍浅析C++ 仿函数,包括了浅析C++ 仿函数的使用技巧和注意事项,需要的朋友参考一下 1.为什么要有仿函数 我们先从一个非常简单的问题入手。假设我们现在有一个数组,数组中存有任意数量的数字,我们希望能够计数出这个数组中大于10的数字的数量,你的代码很可能是这样的: RecallFunc()函数的第三个参数是一个函数指针,用于外部调用,而IsGreaterThanTen()函数通常也是

  • 本文向大家介绍详解C语言中strcpy()函数与strncpy()函数的使用,包括了详解C语言中strcpy()函数与strncpy()函数的使用的使用技巧和注意事项,需要的朋友参考一下 C语言strcpy()函数:复制字符串 头文件:#include <string.h> 定义函数: 函数说明:strcpy()会将参数src 字符串拷贝至参数dest 所指的地址。 返回值:返回参数dest 的字

  • 我有这个代码,输出如下: 链接到下面的示例https://godbolt.org/z/z8Pn9GsTv 输出: 但交换析构函数的位置会产生其他结果: 代码链接https://godbolt.org/z/vxj7dPqaj 输出: 想知道这是一个错误吗?

  • 本文向大家介绍C语言中的abs()函数和exp()函数的用法,包括了C语言中的abs()函数和exp()函数的用法的使用技巧和注意事项,需要的朋友参考一下 C语言abs()函数:求绝对值(整数) 头文件: 定义函数: 函数说明:abs()用来计算参数j 的绝对值,然后将结果返回。 返回值:返回参数j 的绝对值结果。 范例 执行 C语言exp()函数:e的次幂函数(以e为底的x次方值) 头文件: e

  • 在 Go 语言开篇中我们已经知道,Go 语言与 C 语言之间有着千丝万缕的关系,甚至被称之为 21 世纪的C语言。 所以在 Go 与 C 语言互操作方面,Go 更是提供了强大的支持。尤其是在 Go 中使用 C,你甚至可以直接在 Go 源文件中编写 C 代码,这是其他语言所无法望其项背的。 格式: 在 import "C" 之前通过单行注释或者通过多行注释编写C语言代码 在 import "C" 之