C++string转int的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/chengqiuming/article/details/89762873

一 点睛

需要用到下面这一组函数。

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

猜你喜欢

转载自blog.csdn.net/chengqiuming/article/details/89762873