C++string转int的方法

ゝ一纸荒年。 2021-09-19 05:10 417阅读 0赞

一 点睛

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

  1. long int strtol(const char *nptr, char **endptr, int base); //将参数nptr字符串根据参数base来转换成有符号的整型
  2. long long int strtoll(const char *nptr, char **endptr, int base); //将参数nptr字符串根据参数base来转换成有符号的长整型
  3. unsigned long int strtoul(const char *nptr, char **endptr, int base); //将参数nptr字符串根据参数base来转换成无符号整型
  4. 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 代码

  1. #include<iostream>
  2. #include<stdlib.h>
  3. #include<string>
  4. using namespace std;
  5. int main(){
  6. char *endptr;
  7. char nptr[]="123abc";
  8. int ret = strtol(nptr, &endptr, 10 );
  9. cout<<"ret:"<<ret<<endl;
  10. cout<<"endptr:"<<endptr<<endl;
  11. char *endptr2;
  12. char nptr2[]=" \n\t abc";
  13. ret = strtol(nptr2, &endptr2, 10 );
  14. cout<<"ret:"<<ret<<endl;
  15. cout<<"endptr2:"<<endptr2<<endl;
  16. char *endptr8;
  17. char nptr8[]="0123";
  18. ret = strtol(nptr8, &endptr8,0);
  19. cout<<"ret:"<<ret<<endl;
  20. cout<<"endptr8:"<<endptr8<<endl;
  21. char *endptr16;
  22. char nptr16[]="0x123";
  23. ret = strtol(nptr16, &endptr16,0);
  24. cout<<"ret:"<<ret<<endl;
  25. cout<<"endptr16:"<<endptr16<<endl;
  26. return 0;
  27. }

2 运行

  1. [root@localhost charpter03]# g++ 0307.cpp -o 0307
  2. [root@localhost charpter03]# ./0307
  3. ret:123
  4. endptr:abc
  5. ret:0
  6. endptr2:
  7. abc
  8. ret:83
  9. endptr8:
  10. ret:291
  11. endptr16:

3 说明

当第3个参数为0时,则分以下3中情况进行处理:

第1种:如果nptr以0x开头,则把nptr当成16进制来处理。

第2种:如果nptr以0开头,则把nptr当成8进制来处理。

第3种:把nptr当成10进制。

发表评论

表情:
评论列表 (有 0 条评论,417人围观)

还没有评论,来说两句吧...

相关阅读

    相关 CStringstring

    转换分两种情况,就VS中的配置而言,这两种情况就是宽字符集和UNICODE字符集。 宽字符集情况下的转换: CString str = _T("123456");