#include <locale> // wstring_convert
#include <codecvt> // codecvt_utf8
#include <iostream> // cout
#include <string> // stoi and u32string
int main() {
std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> convert;
std::u32string str = U"14";
std::cout << std::stoi(convert.to_bytes(str));
}
これは、数字に同じ表現を使用する UTF-8 と "C" ロケールに依存します。
GCC の標準ライブラリ実装 libstdc++ には、codecvt ヘッダーまたは std::wstring_convert はまだ含まれていません。libc++ には、Visual Studio の標準ライブラリの実装と同様に、これらの両方が含まれています。libstdc++ を使用する必要がある場合は、単純な変換関数を自分で実装するのが最も簡単な場合があります。
#include <algorithm> // transform
#include <iterator> // begin, end, and back_inserter
std::string u32_to_ascii(std::u32string const &s) {
std::string out;
std::transform(begin(s), end(s), back_inserter(out), [](char32_t c) {
return c < 128 ? static_cast<char>(c) : '?';
});
return out;
}
int u32toi(std::u32string const &s) { return stoi(u32_to_ascii(s)); }