std::string を std::u32string に、つまり char の basic_string を char32_t に変換する簡単な STL の方法はありますか?
これは Unicode に関する質問ではありません。
新しい文字列を初期化するには:
std::u32string s32(s.begin(), s.end());
既存の文字列に割り当てるには:
s32.assign(s.begin(), s.end());
サポートされている範囲外の文字が文字列に含まれている可能性がある場合、char
符号拡張の問題が発生し、負の値が大きな正の値に変換される可能性があります。その可能性に対処するのは面倒です。unsigned char
値を拡大する前に変換する必要があります。
s32.resize(s.size());
std::transform(s.begin(), s.end(), s32.begin(),
[](char c) -> unsigned char {return c;});
または単純なループ
s32.clear(); // if not already empty
for (unsigned char c : s) {s32 += c;}
s32.resize(s.length());
std::copy(s.begin(),s.end(),s32.begin());