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,分别对应十六进制、八进制和十进制转换。