有人可以帮助我理解为什么我看到相同输入的不同输出吗? “n”的输出是 2147483647,这是不正确的。为什么?
--------输出------------
FF
FF
FF
FF
FFFFFF
16777215
16777215
--------代码------------------------------------ --------------------------------
string s="FF FF FF FF";
std::stringstream ss(s);
std::istream_iterator<std::string> begin(ss);
std::istream_iterator<std::string> end;
std::vector<std::string> vstrings(begin, end);
std::copy(vstrings.begin(), vstrings.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
printf("\n");
string str2=vstrings[0]+vstrings[1]+vstrings[2]+vstrings[3];
cout<<str2<<endl;
unsigned long n = strtol( str2.c_str(), 0, 16 );
cout<<n<<endl;
string s1 = "ffffffff";
unsigned long n1 = strtoul( s1.c_str(), 0, 16 );
cout << n1 << endl;
最佳答案
strtol
和 strtoul
是不同的函数,它们以不同的方式运行并返回不同的东西。
如果您在 0xFFFFFFFF
上调用 strtol
,则结果可能(取决于平台)超出 long
的范围。从here可以看出, 在这种情况下返回的值将是 LONG_MAX
并且 errno
将被设置。
但是,当您调用 strtoul
时,0xFFFFFFFF
可能在大多数平台上都在范围内,并且只会返回正确的结果。
关于c++ - "strtol"返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58516734/