繁体   English   中英

将Const char *转换为Unsigned long int-strtoul

[英]Converting Const char * to Unsigned long int - strtoul

我正在使用以下代码将Const char *转换为Unsigned long int ,但输出始终为0 我在哪里做错了? 请告诉我。

这是我的代码:

#include <iostream>
#include <vector>
#include <stdlib.h>

using namespace std;

int main() 
{
    vector<string> tok;
    tok.push_back("2");
    const char *n = tok[0].c_str();
    unsigned long int nc;
    char *pEnd;
    nc=strtoul(n,&pEnd,1);
    //cout<<n<<endl;
    cout<<nc<<endl; // it must output 2 !?
    return 0;
}

使用以10为基数:

nc=strtoul(n,&pEnd,10);

或允许自动检测碱基:

nc=strtoul(n,&pEnd,0);

strtoul的第三个参数是要使用的基数,而您将其作为基数1。

您需要使用:

nc=strtoul(n,&pEnd,10);

您使用base=1表示仅允许零。

如果您需要有关整数基数的信息,可以阅读此内容

C标准库函数strtoul将数字系统的基数/基数用作第三个参数,该数字/基数将用于解释第一个参数所指向的char数组。

我在哪里做错了?

nc = strtoul(n,&pEnd, 1 );

您将基数传递为1,这将导致一元数字系统,即唯一可以代表的数字是0。因此,您只能将其作为输出。 如果需要十进制系统解释,请传递10而不是1。

另外,传递0可使函数基于前缀自动检测系统:如果以0开头,则将其解释为八进制;如果是0x0X ,则将其视为十六进制;如果具有其他数字,则假定为小数。

在旁边:

  • 如果您不需要知道转换所考虑的字符,则不需要传递虚拟的第二个参数; 您可以改为传递NULL
  • 在C ++程序中使用C标准库函数时, 建议您包含标头的C ++版本; 否则,建议您在标头中添加C ++版本的标头。 带有前缀c ,不带后缀.h例如,在您的情况下,它将为#include <cstdlib>
  • using namespace std; 认为是不良做法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM