2

这给出了 bad_lexical_cast 异常:

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

当值不适合int8_t.

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

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

4

2 回答 2

7

问: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

于 2012-09-18T08:05:33.383 回答
3

lexical_castint8_toruint8_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"));
于 2012-09-18T08:32:29.693 回答