c++ - "strtol"返回不同的值

标签 c++ eclipse

有人可以帮助我理解为什么我看到相同输入的不同输出吗? “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;

最佳答案

strtolstrtoul 是不同的函数,它们以不同的方式运行并返回不同的东西。

如果您在 0xFFFFFFFF 上调用 strtol,则结果可能(取决于平台)超出 long 的范围。从here可以看出, 在这种情况下返回的值将是 LONG_MAX 并且 errno 将被设置。

但是,当您调用 strtoul 时,0xFFFFFFFF 可能在大多数平台上都在范围内,并且只会返回正确的结果。

关于c++ - "strtol"返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58516734/

相关文章:

c++ - 如何在 QT 中获得调整大小 handle ?

android - 在 Eclipse 中编译时出错

c++ - .so build error coming - 请建议(eclipse CDT cygwin)

java - 项目可交付成果中的 .classpath 文件

c++ - C++ 中整数 vector 的序列化/反序列化

c++ - 链表中头/第一个节点的声明

c++ - 比较运算符的数值精度

c++ - 使用作为参数返回的指针的最佳实践是什么

java - 从外部类调用方法时 Eclipse 声明错误

android - Eclipse Android 虚拟设备管理器无法启动