std :: string到int8_t

时间:2012-09-18 08:00:16

标签: c++

这会产生bad_lexical_cast异常:

int8_t i = boost::lexical_cast<int8_t>("12");

当值不适合int8_t时,我希望有一个例外。

我该怎么做?如果值超出-128到127的范围,我应该首先转换为int并抛出异常吗?

我也有兴趣将字符串转换为uint8_t。

2 个答案:

答案 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_castint8_t的{​​p> uint8_t被视为字符。

您可以将lexical_castnumeric_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"));