strtol, strtoll, strtoul, strtoull

2023-10-06 01:30

本文主要是介绍strtol, strtoll, strtoul, strtoull,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

strtol, strtoll, strtoul, strtoull

convert a string to a (signed, unsigned ) long integer string

声明:

#include<stdlib.h> ( 这个是C标准库,与linux无关。这套函数是通用的。)

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

unsigned long int strtoul(const char *nptr, char **endptr, int base);
unsigned long long int strtoull(const char *nptr, char **endptr, int base);

说明,第一个参数 nptr是要转化的字符串。第三个参数base说明nptr的进制。base 取值范围 0,2-36

这几个函数会忽略nptr前面的空格( ' ', '\t', '\n' '\f', '\v' '\r' ,由isspace判定为真的字符)

while (*nptr && isspace ( *nptr ) ) ++ nptr;

然后遇到非合法字符结束;

base = 2; 合法字符为0, 1

base = 3; 合法字符为0,1, 2

...

base = 11; 合法字符为0,1,...,9,a(A)

...

base = 36;合法字符为0, 1, ...,9,a(A),...,z(Z)。

字符 a-z,是忽略大小写的,混着来也行,例如 strtol("aA", NULL, 11)依然能得到正确的结果。

 

函数的第二个参数endptr可以为空,如果不为空,则 endptr 保存函数结束前的那个非合法字符的地址。

如果没有合法字符,则 *endptr = nptr,函数返回0.

例如:

1.

char *endptr;

char nptr[]="123abc";

int ret = strtol(nptr, &endptr, 10 );

由于10进制里没有“数字”a,所以扫描到a,结束。

这样 ret = 123;

endptr = &nptr[3]; ( printf("%s", endptr);将得到字符串 abc )

2.

char nptr[]=" \n\t    abc";

int ret = strtol(nptr, &endptr, 10 );

由于函数会忽略nptr前面的空格(' ', '\n'...),所以,从字符a开始扫描,但是遇见的“第一个”即是不合法字符。

所以函数结束。 ret=0; endptr = nptr;

 

 

 

 

以下的讨论,会认为 nptr 前面没有空格,

即执行过类似于while (*nptr  &&isspace ( *nptr ) ) ++ nptr;

如果base 为0.则分3种情况:

如果nptr 以0x(零x)开头,则把nptr当成16进制处理。

如果npstr以0(零)开头,则把nptr当成8进制处理。

否则,把nptr当成10进制。

 

 

 

 

对于函数执行错误,如传了一个非合法base,则errno会设置相关值

这篇关于strtol, strtoll, strtoul, strtoull的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/152514

相关文章

strtoll 介绍和举例

strtoll 是 C 标准库中的一个函数,用于将字符串转换为长长整型(long long)。它可以处理任意基数的数字表示形式(比如十进制、十六进制等),并提供错误检查功能。strtoll 的原型定义在 <stdlib.h> 头文件中。 代码 以下是一个示例,展示如何使用 strtoll 将十六进制字符串转换为 long long 类型,并进行错误检查: #include <stdio.h>

stof()、atoi()、atol()、strtod()、strtol()、strtoul() 共6个可以将字符串转换为数字的函数

头文件:#include <stdlib.h> atoi() 函数用来将字符串转换成整数(int),其原型为: int atoi (const char * str); 【函数说明】atoi() 函数会扫描参数 str 字符串,跳过前面的空白字符(例如空格,tab缩进等,可以通过 isspace() 函数来检测),直到遇上数字或正负符号才开始做转换,而再遇到非数字或字符串结束时('\0')才结束转

在C语言中,可以使用strtol函数来将字符串中的16进制数转换为10进制整数

在C语言中,可以使用strtol函数来将字符串中的16进制数转换为10进制整数,进而转换为MAC地址的字节表示。以下是一个将字符串形式的MAC地址转换为16进制表示的例子: #include <stdio.h> #include <stdlib.h> #include <string.h> void mac_string_to_hex(const char *mac_str, unsigned

C语言———strtol()详解

i.e. string to long long int strtol(const char *nptr, char **endptr, int base) strtol()会将nptr指向的字符串,根据参数base,按权转化为long int, 然后返回这个值。 参数base的范围为2~36,和0;它决定了字符串以被转换为整数的权值。 可以被转换的合法字符依据base而定,举例来说,当base

Linux strict_strtoul 函数

strict_strtoul函数所在位置: 路径:kernel/include/linux/kernel.h 定义: 1. #define strict_strtoul kstrtoul 2. #define strict_strtoull kstrtoull

【温故知新C/C++】virtual(多态,覆盖,隐藏)||strtok||strtod||strtol||strrchr||fgets

VC++深入详解:函数的覆盖和隐藏 1.函数的覆盖  在上一节介绍多态性的时候,我们给出了下面的代码片段:  例2-19  class animal  {  public:  …  virtual void breathe()  {  cout<<"animal breathe"<  }  };  class fish:public animal  {  public:  void bre