这会产生bad_lexical_cast异常:
int8_t i = boost::lexical_cast<int8_t>("12");
当值不适合int8_t
时,我希望有一个例外。
我该怎么做?如果值超出-128到127的范围,我应该首先转换为int并抛出异常吗?
我也有兴趣将字符串转换为uint8_t。
答案 0 :(得分:7)
问:int8_t或uint8_t的lexical_cast不符合我的预期?
答:如上所述,请注意int8_t和uint8_t实际上是字符并且格式如此。为避免这种情况,首先强制转换为整数类型
来源:
http://www.boost.org/doc/libs/1_51_0/doc/html/boost_lexical_cast/frequently_asked_questions.html
答案 1 :(得分:3)
lexical_cast
或int8_t
的{p> uint8_t
被视为字符。
您可以将lexical_cast
与numeric_cast
合并,以获得您想要的内容:
#include <boost/numeric/conversion/cast.hpp>
#include <boost/lexical_cast.hpp>
using boost::lexical_cast;
using boost::numeric_cast;
numeric_cast<int8_t>(lexical_cast<int>("128"));
numeric_cast<uint8_t>(lexical_cast<int>("256"));