如何告诉wstring我正在提供的字符串已经是一个wstring?

时间:2011-03-26 04:12:01

标签: c++ stl wstring

我使用std :: string作为文本缓冲区。然后,我确信该缓冲区中包含的数据是UTF-16(即它实际上是一个std :: wstring)。 如何将std :: string强制转换为std :: wstring? std :: string是用词不当,数据实际上是一个wstring。

2 个答案:

答案 0 :(得分:4)

考虑使用std::vector<char>代替std::string。当你想要“连续的字节序列”时,它是正确的容器。

使用std::vector源容器,代码相当简单,假设您真的只想重新解释数据(即,您真的只想将字节视为{{1}的序列}):

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())); ,如果您可以保证您使用的std::string的实现连续存储其字符,则同样的方法将起作用。在实践中,情况总是如此。

答案 1 :(得分:1)

无法保证std::wstring将字节数组存储/解释为UTF-16(尽管发生在Windows中执行此操作)。看看这个问题:std::wstring VS std::string

因此,我建议您重新考虑从UTF-16编码的字节数组构造std::wstring的想法,除非您确定您的应用程序只能用MSVC编译。