如何将std :: string转换为std :: u32string?

时间:2014-11-11 11:17:09

标签: c++11 stl char stdstring char32-t

是否有一种简单的STL方法将std :: string转换为std :: u32string,即char的basic_string为char32_t?

这不是Unicode问题。

2 个答案:

答案 0 :(得分:0)

s32.resize(s.length());
std::copy(s.begin(),s.end(),s32.begin());

答案 1 :(得分:0)

初始化新字符串:

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;}