std::atoll with VC++

别说谁变了你拦得住时间么 提交于 2019-12-05 01:36:22

MSVC have _atoi64 and similar functions, see here

For unsigned 64 bit types, see _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);
    

If you have run a performance test and concluded that the conversion is your bottleneck and should be done really fast, and there's no ready function, I suggest you write your own. here's a sample that works really fast but has no error checking and deals with only positive numbers.

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

Do you have strtoull available in your <cstdlib>? It's C99. And C++0x should also have stoull to work directly on strings.

Visual Studio 2013 finally has std::atoll.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!