Как преобразовать std::string в std::u32string?
Есть ли простой способ STL для преобразования std::string в std::u32string, то есть basic_string char в char32_t?
Это не вопрос Unicode.
2 ответа
Решение
Чтобы инициализировать новую строку:
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());