C++中strtol函数的使用方法

1 作用

strtol()函数的作用是将字符串类型转换为相应的long类型。

2 格式

strtol()函数的格式为

long strtol( const char *string, char **end_ptr, int base );

其中,参数string是要转换的字符串,end_ptr是字符串的指针,该指针指向了参数string中没有被转换的部分,如果不需要该参数,可以将其设置为NULL;参数base表示转换的进制。如果转换成功,strtol()函数的返回值是转换后的long类型的值,如果转换失败,则返回值是0。

3 使用方法

char   *string, *stopstring;
long   myNum;
string = "1234This stopped it";
myNum = strtol(string, &stopstring, 10);

其中,使用strtol()函数将string转换为十进制的long类型。此时,myNum的值是1234,转换到了string中的“4”之后就结束了,因此stopstring指向的字符串是”This stopped it”。

4 注意事项

4.1 结束转换时机

4.1.1 特殊字符

当strtol()函数遇到了string中特殊字符,此时转换结束。无法转换的内容包括字符串结束符“\0”和空格等。

string = "1234 5678";

或者

string = "1234\05678";

时,经过转换后myNum的值都是1234。

4.1.2 大于等于base的数

在“2 格式”中提到,strtol()函数的参数base表示进制数。当要转换的string中包含了大于等于base的数时,转换结束。需要注意的是字符“a”~“z”(或者“A”~“Z”)的值对应10-35。

string = "1234a5678";
myNum = strtol(string, &stopstring, 10);

此时base的值是10,strtol()函数遇到string中的“a”时停止转换,此时myNum的值是1234。

4.2 base的取值范围

4.2.1 base的最大值

在“4.1.2 大于等于base的数”中提到,字符“a”~“z”(或者“A”~“Z”)的值对应10-35。因此,base的最大值应该是36。

l = strtol(string, &stopstring, 37);

此时,程序可以编译通过,但是运行时会报错。

4.2.2 base等于0

当base等于0时,由要转换的字符串的首字母来决定转换的进制数。如果首字符是0并且第二个字符是“x”或者“X”,则基于十六进制转换;如果首字符是0并且第二个字符不是“x”或者“X”,则基于八进制转换;如果首字符是“1”~“9”,则基于十进制转换;如果首字符是“a”~“z”,则基于十一到三十六进制转换。

string1 = "0x123";
string2 = "0123";
string3 = "123";

使用strtol()函数对以上三个字符串进行转换时,如果base设置为0,分别对应十六进制、八进制和十进制转换。


版权声明:本文为hou09tian原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。