用boost::lexical_cast进行数值转换
在STL库中,我们可以通过stringstream来实现字符串和数字间的转换:
int i = 0;
stringstream ss;
ss << "123";
ss >> i;
但stringstream是没有错误检查的功能,例如对如如下代码,会将i给赋值为12.
ss << "12.3";
ss >> i;
甚至连这样的代码都能正常运行:
ss << "hello world";
ss >> i;
这显然不是我们所想要看到的。为了解决这一问题,可以通过boost::lexical_cast来实现数值转换:
int i = boost::lexical_cast<int>("123");
double d = boost::lexical_cast<double>("12.3");
对于非法的转换,则会抛异常:
try
{
int i = boost::lexical_cast<int>("12.3");
}
catch (boost::bad_lexical_cast& e)
{
cout << e.what() << endl;
}
对于16机制数字的转换,可以以如下方式进行:
template <typename ElemT>
struct HexTo {
ElemT value;
operator ElemT() const {return value;}
friend std::istream& operator>>(std::istream& in, HexTo& out) {
in >> std::hex >> out.value;
return in;
}
};
int main(void)
{
int x = boost::lexical_cast<HexTo<int>>("0x10");
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步