這給出了一個例外bad_lexical_cast:的std :: string到中int8_t
int8_t i = boost::lexical_cast<int8_t>("12");
我想有當值不適合在int8_t
異常。
我該怎麼做?如果值超出範圍-128到127,我應該先投射到一個int並拋出一個異常?
我也有興趣將字符串轉換爲uint8_t。
這給出了一個例外bad_lexical_cast:的std :: string到中int8_t
int8_t i = boost::lexical_cast<int8_t>("12");
我想有當值不適合在int8_t
異常。
我該怎麼做?如果值超出範圍-128到127,我應該先投射到一個int並拋出一個異常?
我也有興趣將字符串轉換爲uint8_t。
問: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
一個int8_t
或uint8_t
的lexical_cast
被視爲炭。
你可以用numeric_cast
結合lexical_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"));
酷!我現在可以編寫一個轉換函數,它引用所需類型的值以及要轉換的字符串。 – Baz
的'bad_lexical_cast'已經是一個例外,爲什麼不能趕上,然後如果你想,拋出自己的異常? – Nim
當然,使用'int8_t'不是可移植的。它是「可選的」,即,實現不需要提供它。 –