10

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

我也有兴趣转换stringsuint64_t. 取自 的整数定义cstdint

4

5 回答 5

8

MSVC 有 _atoi64 和类似的功能,看这里

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

于 2011-07-07T13:01:56.777 回答
5
  • 使用字符串流 ( <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);
    
于 2011-07-07T12:27:21.290 回答
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;
}
于 2011-07-07T12:54:48.280 回答
1

你有strtoull可用的<cstdlib>吗?是C99。C++0x 也应该stoull直接在字符串上工作。

于 2011-07-07T12:56:15.320 回答
1

Visual Studio 2013 终于有了std::atoll.

于 2014-09-25T09:52:33.607 回答