2012-03-07 107 views
0

參照這裏提供的解決方案,美麗, Convert string to int with bool/fail in C++從的std :: string轉換爲UINT8

我想爲std :: string轉換爲8位數字(無符號數) 問題是因爲8位數字表示爲字符,所以它被解析錯了
(試圖解析任何1位以上的數字 - 像10 - 失敗)

任何想法?

+0

C++ 11有以下:http://en.cppreference.com/w/cpp/string/basic_string/stoul但你仍然需要轉換(即'static_cast ')結果和檢查邊界。 – rubenvb 2012-03-07 13:25:55

回答

4

使用模板特殊化:

template <typename T> 
void Convert(const std::string& source, T& target) 
{ 
    target = boost::lexical_cast<T>(source); 
} 

template <> 
void Convert(const std::string& source, int8_t& target) 
{ 
    int value = boost::lexical_cast<int>(source); 

    if(value < std::numeric_limits<int8_t>::min() || value > std::numeric_limits<int8_t>::max()) 
    { 
     //handle error 
    } 
    else 
    { 
     target = (int8_t)value; 
    } 
} 
+0

太棒了!非常感謝 – Boaz 2012-03-07 15:30:33

1

將數字解析爲int,然後將其轉換爲uint8_t。您也可以執行綁定檢查。

+0

這是我的想法...問題是它毀了漂亮的模板,我試圖找出是否有更優雅的解決方案 – Boaz 2012-03-07 12:58:45

+0

並添加到手邊 - 我有模板功能,接受 - 什麼是排除int8的好方法? – Boaz 2012-03-07 13:48:10