带VC ++的std :: atoll

时间:2011-07-07 12:25:17

标签: c++ int64 uint64 strtol

我一直在使用std::atoll中的cstdlib将字符串转换为带有gcc的int64_t。该工具似乎在Windows工具链上不可用(使用Visual Studio Express 2010)。什么是最好的选择?

我也有兴趣将strings转换为uint64_t。整数定义取自cstdint

5 个答案:

答案 0 :(得分:8)

MSVC有_atoi64和类似功能,请参阅here

对于无符号64位类型,请参阅_strtoui64

答案 1 :(得分:5)

  • 使用stringstreams(<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);
    

答案 2 :(得分:2)

如果您已经进行了性能测试并得出结论认为转换是您的瓶颈并且应该非常快速地完成,并且没有现成的功能,我建议您自己编写。 这是一个非常快速但没有错误检查的样本,只处理正数。

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;
}

答案 3 :(得分:1)

您的<cstdlib>中是否有strtoull?这是C99。而C ++ 0x也应该stoull直接在字符串上工作。

答案 4 :(得分:1)

Visual Studio 2013最终有std::atoll