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