strtol为两个不同的十六进制字符串给出相同的答案

时间:2014-09-22 09:44:25

标签: c++ decimal hex strtol

所以我有两个十六进制字符串 - "3b101c091d53320c000910""071d154502010a04000419"。当我对它们使用strtol()时,我会为两个字符串获得相同的值。

我尝试了以下代码 -

    string t1="3b101c091d53320c000910";
    long int hext1=strtol(t1.c_str(),0,16);
    string t2="071d154502010a04000419";
    long int hext2=strtol(t2.c_str(),0,16);
    cout<<hext1<<endl;
    cout<<hext2<<endl;

两者都给了我相同的价值:9223372036854775807

我不知道strtol()是如何工作的,因为我是C ++的新手,但它为两个不同的十六进制字符串提供了相同的值。为什么呢?

2 个答案:

答案 0 :(得分:5)

您应该从reading the manual page开始。由于您输入的内容太大而无法放入LONG_MAX,因此返回long

此外,strtol()是一种非常简单的C方式,您可以用C ++进行编程。

答案 1 :(得分:0)

您未正确使用strtol。您应该将errno设置为 在调用之前0,并检查它是否仍为0; 否则,它将包含一个错误代码(可以显示 使用strerror)。另外,你应该传递它的地址 一个char const*,以便您可以确保已处理完毕 整个字符串(否则,"abc"将返回0,没有 错误):

errno = 0;
char const* end;
long hext1 = strtol( t1.c_str(), &end, 16 );
if ( errno != 0 || *end != '\0' ) {
    //  Error occured.
}