2013-10-31 114 views
1

我想在MFC项目中从十六进制字符串转换为整数。 的代码是这样的:转换4字节十六进制字符串为整数

CString sMask = "0xFFFFFFE0"; 
char* pMaskBuffer = sMask.GetBuffer(sMask.GetLength());    
sMask.ReleaseBuffer(); 
char * p = NULL; 
long iMask = strtol(pMaskBuffer, &p, 16); 

代码工作正常时sMask变量是small.But 4字节掩码生成奇怪值。而不是4294967264,我得到2147483647.如何克服这一点。请帮助。

回答

4

这是因为strtol将返回长期使用这种

unsigned long iMask = strtoul(pMaskBuffer, &p, 16); 
1

std::strtol reference page

如果转换值脱离的相应返回类型的范围时,发生错误的范围(设定errnoERANGE)和LONG_MAXLONG_MIN,...被返回。

在你的情况LONG_MAX返回,如果你检查errno我敢打赌,这将是ERANGE。原因是strtol签署的值,如果你想要无符号值你应该使用std::strtoul


另外请注意,如果你在将来某个时候改变使用C++ 11功能std::stol,它会在这种情况下抛出一个异常std::out_of_range

相关问题