以与std::wstring
相同的方式使用MultiByteToWideChar
吗?
std::wstring widen(const std::string &in)
{
int len = MultiByteToWideChar(CP_UTF8, 0, &in[0], -1, NULL, 0);
std::wstring out(len, 0);
MultiByteToWideChar(CP_UTF8, 0, &in[0], -1, &out[0], len);
return out;
}
最佳答案
如果您要问它是否可行,可能。这是正确的吗?
in.c_str()
而不是&in[0]
MultiByteToWideChar
的返回值。 MultiByteToWideChar
如果成功调用,将包括一个零终止符(即成功时总是返回> = 1)。 std::wstring
的长度构造函数不需要这样做。 std::wstring(5,0)
将为六个宽字符分配空间; 5+零项。因此,从技术上讲,您要分配太多的宽字符。 从
MultiByteToWideChar
和-1上的 cbMultiByte
文档中: