0

所以我有两个十六进制字符串 -"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++ 新手,但它为两个不同的十六进制字符串提供了相同的值。为什么?

4

2 回答 2

5

您应该从阅读手册页开始。它正在返回LONG_MAX,因为您的输入太大而无法放入long.

此外,strtol()这是一种非常 C 的做事方式,并且您正在使用 C++ 进行编程。

于 2014-09-22T09:48:04.853 回答
0

你没有strtol正确使用。调用前应设置errno为0,调用后检查是否仍为0;否则,它将包含一个错误代码(可以使用 显示strerror)。此外,您应该将 a 的地址传递给它char const*,这样您就可以确保它已经处理了整个字符串(否则,"abc"将返回 0,而不会出错):

errno = 0;
char const* end;
long hext1 = strtol( t1.c_str(), &end, 16 );
if ( errno != 0 || *end != '\0' ) {
    //  Error occured.
}
于 2014-09-22T16:59:52.953 回答