std:: Атолл с VC++


Я использую std::atoll из cstdlib для преобразования строки в int64_t с помощью gcc. Эта функция, по-видимому, недоступна в Windows toolchain (с помощью Visual Studio Express 2010). Что является лучшей альтернативой?

Я также заинтересован в преобразовании strings в uint64_t. Целочисленные определения взяты из cstdint.
5 10

5 ответов:

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

Есть ли у васstrtoull доступно в вашем <cstdlib>? Это С99. И C++0x также должен иметь stoull работать непосредственно на струнах.

Visual Studio 2013 наконец-то имеет std::atoll.