std::atoll with VC++



我一直使用std::atollcstdlib转换字符串到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 .

相关内容

  • 没有找到相关文章

最新更新