我使用以下代码将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;
}
答案 0 :(得分:3)
使用base-10:
nc=strtoul(n,&pEnd,10);
或允许自动检测基础:
nc=strtoul(n,&pEnd,0);
strtoul
的第三个参数是要使用的基础,你将它作为基础-1。
答案 1 :(得分:2)
答案 2 :(得分:1)
C标准库函数strtoul将数字系统的base/radix作为其第三个参数,用于解释第一个参数指向的char数组。
我在哪里做错了?
NC = strtoul将(N,&安培; PEND,<强> 1 强>);
您将基数传递为1,这会导致unary numeral system,即唯一可以重复的数字是0.因此,您只能将其作为输出。如果需要十进制系统解释,则传递10而不是1。
或者,传递0允许函数根据前缀自动检测系统:如果它以 0 开头,那么它被解释为八进制,如果它是 0x 或 0X 它被视为十六进制,如果它有其他数字则假定为十进制。
<强>除了:强>
NULL
。c
,不带后缀.h
,例如在您的情况下,它是#include <cstdlib>
using namespace std;
是considered bad practice