如何测试无符号__int64数是否超出范围

时间:2013-08-24 15:35:14

标签: testing char range int64

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

1 个答案:

答案 0 :(得分:1)

如果您可以使用现代编译器或Boost,那么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

有关Boost库的信息,请参阅this link。你绝对可以为VS 2008获得这个。

如果这只是Windows,您还可以查看_atoi64等。见msdn。在上溢/下溢的情况下,这些返回I64_MAXI64_MIN