如何告诉wstring我正在喂的字符串已经是wstring?

uni*_*n83 3 c++ stl wstring

我正在使用std :: string作为文本缓冲区。然后,我确定该缓冲区中包含的数据是UTF-16(即它实际上是std :: wstring)。如何将std :: string强制转换为std :: wstring?std :: string是错误的名称,数据实际上是wstring。

Jam*_*lis 5

考虑使用std::vector<char>而不是std::string。当您需要“连续的字节序列”时,它是正确的容器。

对于std::vector源容器,代码非常简单,假设您确实只想重新解释数据(即,您实际上只想将字节视为的序列wchar_t):

std::vector<char> v = get_my_wstring_character_data();
if (v.size() % sizeof (wchar_t) != 0)
    throw std::runtime_error("Invalid wstring length");

std::wstring ws(reinterpret_cast<wchar_t*>(&v[0]), 
                reinterpret_cast<wchar_t*>(&v[0] + v.size()));
Run Code Online (Sandbox Code Playgroud)

如果您的源代码是std::string,则可以确保std::string您正在使用的实现连续存储其字符,则可以使用相同的方法。实际上,情况总是如此。