2015-10-19 74 views

回答

2

試試這個功能:(它不一定是最有效的解決方案,但它得到,如果你沒有選擇工作完成(即你必須有一個char16_t*輸入)你確定你確實有數字在你的char16_t*串有效的序列)

Run It Online

#include <codecvt> 
#include <locale> 
#include <string> 

int char16_to_int(const char16_t* s16) 
{ 
    // https://stackoverflow.com/a/7235204/865719 
    std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert; 
    std::string str = convert.to_bytes(s16); 

    return std::stoi(str); 
} 

long char16_to_long(const char16_t* s16) 
{ 
    // https://stackoverflow.com/a/7235204/865719 
    std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert; 
    std::string str = convert.to_bytes(s16); 

    return std::stol(str); 
} 

編輯:我已經重構瞭解決方案只是一個小b它減少重複:

Run It Online

#include <codecvt> 
#include <locale> 
#include <string> 

std::string char16_to_string(const char16_t* s16) 
{ 
    // https://stackoverflow.com/a/7235204/865719 
    std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert; 
    return convert.to_bytes(s16); 
} 

long char16_to_long(const char16_t* s16) 
{ 
    return stol(char16_to_string(s16)); 
} 

int char16_to_int(const char16_t* s16) 
{ 
    return stoi(char16_to_string(s16)); 
} 
+1

大功能(S),我會在情況下非數字通過添加try/catch塊。 – FFMG

+0

這當然是一個好主意:) – 865719

相關問題