我有以下字符串:
sThis = "2154910440";
unsigned int iStart=atoi(sThis.c_str());
然而结果是
iStart = 2147483647
有人看到我的错误吗?
atoi
将字符串转换为int
。在您的系统上,int
为 32 位,其最大值为 2147483647。您尝试转换的值超出了此范围,因此返回值atoi
未定义。我猜你的实现会返回一个最大值int
在这种情况下。
你可以改为使用atoll http://en.cppreference.com/w/cpp/string/byte/atoi,它返回一个 long long,保证至少为 64 位。或者你可以使用一个函数stoi/stol/stoll http://en.cppreference.com/w/cpp/string/basic_string/stol家人,或者他们的未签名的对应方 http://en.cppreference.com/w/cpp/string/basic_string/stoul,它实际上会以异常的形式提供有关超出范围的值(和无效值)的有用错误报告。
就我个人而言,我喜欢boost::lexical_cast http://www.boost.org/doc/libs/1_54_0/doc/html/boost_lexical_cast.html。尽管它看起来有点麻烦,但它可以在更通用的上下文中使用。您可以在模板中使用它,只需转发类型参数,而不必进行专门化
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)