码迷,mamicode.com
首页 > 其他好文 > 详细

用boost::lexical_cast进行数值转换

时间:2017-08-31 09:47:15      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:数字   ring   没有   void   转换   type   机制   opera   catch   

在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"); 
    }

用boost::lexical_cast进行数值转换

标签:数字   ring   没有   void   转换   type   机制   opera   catch   

原文地址:http://www.cnblogs.com/earvin/p/7456448.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!