std:: Атолл с VC++
Я использую std::atoll
из cstdlib
для преобразования строки в int64_t
с помощью gcc. Эта функция, по-видимому, недоступна в Windows toolchain (с помощью Visual Studio Express 2010). Что является лучшей альтернативой?
strings
в uint64_t
. Целочисленные определения взяты из cstdint
.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; }