Как преобразовать 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());
Другие вопросы по тегам