C++string转int的方法
一 点睛
需要用到下面这一组函数。
long int strtol(const char *nptr, char **endptr, int base); //将参数nptr字符串根据参数base来转换成有符号的整型
long long int strtoll(const char *nptr, char **endptr, int base); //将参数nptr字符串根据参数base来转换成有符号的长整型
unsigned long int strtoul(const char *nptr, char **endptr, int base); //将参数nptr字符串根据参数base来转换成无符号整型
unsigned long long int strtoull(const char *nptr, char **endptr, int base); //将参数nptr字符串根据参数base来转换成无符号长整型
使用说明
第一个参数 nptr是要转化的字符串。
第二个参数endptr可以为空,如果不为空,则 endptr 保存函数结束前的那个非合法字符的地址。如果没有合法字符,则 *endptr = nptr,函数返回0.
第三个参数base说明nptr的进制。base 取值范围 0,2-36。
这几个函数会忽略nptr前面的空格( ‘ ‘, ‘\t’, ‘\n’ ‘\f’, ‘\v’ ‘\r’ ,由isspace判定为真的字符)。
二 实战
1 代码
#include<iostream>
#include<stdlib.h>
#include<string>
using namespace std;
int main(){
char *endptr;
char nptr[]="123abc";
int ret = strtol(nptr, &endptr, 10 );
cout<<"ret:"<<ret<<endl;
cout<<"endptr:"<<endptr<<endl;
char *endptr2;
char nptr2[]=" \n\t abc";
ret = strtol(nptr2, &endptr2, 10 );
cout<<"ret:"<<ret<<endl;
cout<<"endptr2:"<<endptr2<<endl;
char *endptr8;
char nptr8[]="0123";
ret = strtol(nptr8, &endptr8,0);
cout<<"ret:"<<ret<<endl;
cout<<"endptr8:"<<endptr8<<endl;
char *endptr16;
char nptr16[]="0x123";
ret = strtol(nptr16, &endptr16,0);
cout<<"ret:"<<ret<<endl;
cout<<"endptr16:"<<endptr16<<endl;
return 0;
}
2 运行
[root@localhost charpter03]# g++ 0307.cpp -o 0307
[root@localhost charpter03]# ./0307
ret:123
endptr:abc
ret:0
endptr2:
abc
ret:83
endptr8:
ret:291
endptr16:
3 说明
当第3个参数为0时,则分以下3中情况进行处理:
第1种:如果nptr以0x开头,则把nptr当成16进制来处理。
第2种:如果nptr以0开头,则把nptr当成8进制来处理。
第3种:把nptr当成10进制。
还没有评论,来说两句吧...