我使用 std::string 作为文本缓冲区。然后,我确定该缓冲区中包含的数据是 UTF-16(即它实际上是一个 std::wstring)。如何将 std::string 强制转换为 std::wstring?std::string 用词不当,数据实际上是 wstring。
问问题
554 次
2 回答
5
考虑使用 astd::vector<char>
而不是 a 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()));
如果您的来源是std::string
,那么如果您可以保证std::string
您使用的实现是连续存储其字符,那么同样的方法将起作用。在实践中,情况总是如此。
于 2011-03-26T04:23:47.453 回答
1
不能保证std::wstring
将字节数组存储/解释为 UTF-16(尽管它恰好在 Windows 中这样做)。看看这个问题:std::wstring VS std::string
因此,我建议您重新考虑std::wstring
从 UTF-16 编码的字节数组构造 a 的想法,除非您确定您的应用程序只会使用 MSVC 编译。
于 2011-03-26T04:24:39.677 回答