我一直在使用std::atoll
fromcstdlib
将字符串转换为int64_t
带有 gcc 的字符串。该功能似乎在 Windows 工具链上不可用(使用 Visual Studio Express 2010)。什么是最好的选择?
我也有兴趣转换strings
为uint64_t
. 取自 的整数定义cstdint
。
MSVC 有 _atoi64 和类似的功能,看这里
对于无符号 64 位类型,请参见_strtoui64
使用字符串流 ( <sstream>
)
std::string numStr = "12344444423223";
std::istringstream iss(numStr);
long long num;
iss>>num;
使用 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;
}
Visual Studio 2013 终于有了std::atoll
.