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