1
我想將char16_t轉換爲整數和/或long。將char16_t轉換爲long/integer(atoi/atol等價)
const char16_t* t = u"12";
long lt = atol(t);
這樣的功能不存在嗎?
我想將char16_t轉換爲整數和/或long。將char16_t轉換爲long/integer(atoi/atol等價)
const char16_t* t = u"12";
long lt = atol(t);
這樣的功能不存在嗎?
試試這個功能:(它不一定是最有效的解決方案,但它得到,如果你沒有選擇工作完成(即你必須有一個char16_t*
輸入)和你確定你確實有數字在你的char16_t*
串有效的序列)
#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它減少重複:
#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));
}
大功能(S),我會在情況下非數字通過添加try/catch塊。 – FFMG
這當然是一個好主意:) – 865719