我一直在使用cstdlib
的std::atoll
將字符串轉換爲使用gcc的int64_t
。該功能似乎不可用在Windows工具鏈上(使用Visual Studio Express 2010)。什麼是最好的選擇?std ::使用VC++的環礁
我也對strings
轉換爲uint64_t
感興趣。整數的定義取自cstdint
。
我一直在使用cstdlib
的std::atoll
將字符串轉換爲使用gcc的int64_t
。該功能似乎不可用在Windows工具鏈上(使用Visual Studio Express 2010)。什麼是最好的選擇?std ::使用VC++的環礁
我也對strings
轉換爲uint64_t
感興趣。整數的定義取自cstdint
。
MSVC有_atoi64和類似的功能,看到here
對於無符號的64位類型,請參閱_strtoui64
使用stringstreams(<sstream>
)
std::string numStr = "12344444423223";
std::istringstream iss(numStr);
long long num;
iss>>num;
使用升壓的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;
}
謝謝阿門,我只是可能。這是非常類似於http://stackoverflow.com/questions/5830868/c-stringstream-is-too-slow-how-to-speed-up雙打。 – Cookie
的Visual Studio 2013終於有了std::atoll
。
看來這個問題在VS2013中修復http://connect.microsoft.com/VisualStudio/feedback/details/752386/std-atoll-not-found – javapowered