这给出了 bad_lexical_cast 异常:
int8_t i = boost::lexical_cast<int8_t>("12");
当值不适合int8_t
.
我该怎么做?如果值超出 -128 到 127 的范围,我应该先转换为 int 并抛出异常吗?
我也有兴趣将字符串转换为 uint8_t。
这给出了 bad_lexical_cast 异常:
int8_t i = boost::lexical_cast<int8_t>("12");
当值不适合int8_t
.
我该怎么做?如果值超出 -128 到 127 的范围,我应该先转换为 int 并抛出异常吗?
我也有兴趣将字符串转换为 uint8_t。
问:int8_t 或 uint8_t 的 lexical_cast 没有达到我的预期?
A:如上所述,请注意 int8_t 和 uint8_t 实际上是 chars 并且是这样格式化的。为避免这种情况,请先转换为整数类型
来源:
http://www.boost.org/doc/libs/1_51_0/doc/html/boost_lexical_cast/frequently_asked_questions.html
lexical_cast
的int8_t
oruint8_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"));