【发布时间】:2013-09-05 09:38:14
【问题描述】:
如何将std::string 转换为uint64_t?如果字符串不包含uint64_t 的纯表示,我还希望该函数抛出。例如,这些的转换应该抛出:
"NO: 9889"
"9889L"
"9889U"
"1e+22"
或以另一种方式表明它们不是纯粹的表示。我正在使用 C++98 和 boost(包括boost::regex)。
【问题讨论】:
如何将std::string 转换为uint64_t?如果字符串不包含uint64_t 的纯表示,我还希望该函数抛出。例如,这些的转换应该抛出:
"NO: 9889"
"9889L"
"9889U"
"1e+22"
或以另一种方式表明它们不是纯粹的表示。我正在使用 C++98 和 boost(包括boost::regex)。
【问题讨论】:
使用boost::lexical_cast。如果数字无法解析或溢出,它将抛出bad_lexical_cast。
如果您曾经切换到 C++11,标准中有一个新功能应该更快。
【讨论】:
for 和 isdigit() 后跟 strtoll() 始终是一个选项。
也许不是单行,而是一个很好的函数,可以写在你的 stringutils.cpp 中。
【讨论】: