2

これにより、bad_lexical_cast 例外が発生します。

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

値が に収まらない場合は例外が必要int8_tです。

どうすればいいですか?最初に int にキャストし、値が -128 ~ 127 の範囲外の場合は例外をスローする必要がありますか?

文字列を uint8_t に変換することにも興味があります。

4

2 に答える 2

7

Q: int8_t または uint8_t の lexical_cast が期待どおりに動作しないのは何ですか?

A: 上記のように、int8_t と uint8_t は実際には char であり、そのようにフォーマットされていることに注意してください。これを回避するには、最初に整数型にキャストします

ソース:

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_tまたはの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"));
于 2012-09-18T08:32:29.693 に答える