我一直使用std::atoll
从cstdlib
转换字符串到int64_t
与gcc。该功能似乎在Windows工具链中不可用(使用Visual Studio Express 2010)。最好的选择是什么?
我也对将strings
转换为uint64_t
感兴趣。整数定义取自cstdint
.
MSVC有_atoi64和类似的功能,见这里
对于无符号64位类型,请参见_strtoui64
-
use stringstreams (
<sstream>
)std::string numStr = "12344444423223"; std::istringstream iss(numStr); long long num; iss>>num;
-
use boost lexical_cast (
boost/lexical_cast.hpp
)std::string numStr = "12344444423223"; long long num = boost::lexical_cast<long long>(numStr);
如果您运行了性能测试并得出结论,转换是您的瓶颈,应该非常快地完成,并且没有现成的函数,我建议您编写自己的函数。下面是一个运行速度非常快的示例,但是没有错误检查并且只处理正数。
long long convert(const char* s)
{
long long ret = 0;
while(s != NULL)
{
ret*=10; //you can get perverted and write ret = (ret << 3) + (ret << 1)
ret += *s++ - '0';
}
return ret;
}
您的<cstdlib>
中有strtoull
可用吗?C99。C++0x还应该有stoull
直接在字符串上工作
Visual Studio 2013终于有了std::atoll
.