2013-08-24 54 views
0

我有一个函数,其中计算值可以达到比由MS表示的无符号__int64范围更高的值18,446,744,073,709,551,615。如何测试一个数字是否超出了该范围?我已经将int转换为char,并通过使用strlen检查长度来尝试进行测试。但是,一些长度超过指定长度的值:例如if(strlen(charvar)> 17)神秘地逃脱。那么如何有效地测试?如何测试无符号__int64数字是否超出范围

+0

这是为了将字符串转换为数字吗?什么语言? (类C,但是C或C++?) – sfjac

+0

C++,它用于在OpenCV中显示图像中的值(因此我需要使用_ui64toa将它们转换为char)。我只想显示“正确的”。显示它们是没有问题的,但是如果我使用strlen函数来清除有问题的函数,它并不总是有效。 – user1331044

+0

VS 2008,什么是提升?请看看,这是不是有一些简单的测试方法?如果我可以测试数字数字超过19或18,那就足够了。 – user1331044

回答

1

如果你可以用一个现代的编译器或升压,然后lexical_cast将做的工作:

uint64_t bigint; 
try { 
    bigint = lexical_cast<uint64_t>(str); 
} catch (std::bad_lexical_cast &e) { 
    // do whatever you want to do when the string isn't valid; 
} 
// Safely use bigint 

this link为Boost库。你绝对可以得到这VS 2008。

如果这只是Windows,你也可以看看_atoi64之类的。见msdn。如果出现上溢/下溢,则返回I64_MAXI64_MIN

+0

我得到错误C2065:'lexical_cast':未声明的标识符,所以我需要安装Boost我想。如果没有简单的解决方案,我可能会尝试找到替代方案(我可以测试图像中数字的宽度)。无论如何,Thx为您提供帮助! – user1331044

+0

你需要转移到VS2012(VC 11)才能从工作室获得这些。 Boost将把它们放在'boost ::'命名空间中。但'_atoi64'就足够了。 – sfjac

+0

_atoi64听起来很有希望。我会试一试。 – user1331044