用boost::lexical

xiaoxiao2021-02-28  102

在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::istreamoperator>>(std::istreaminHexToout) {             in >> std::hex >> out.value;             return in;         }     };     int main(void)      {         int x = boost::lexical_cast<HexTo<int>>("0x10"); 

    }

转载自:http://www.cnblogs.com/TianFang/archive/2013/02/05/2892506.html

转载请注明原文地址: https://www.6miu.com/read-70237.html

最新回复(0)