我想将普通的string
转换为wstring
。为此,我尝试使用Windows API函数 MultiByteToWideChar
。
但这对我不起作用。
这是我所做的:
string x = "This is c++ not java";
wstring Wstring;
MultiByteToWideChar( CP_UTF8 , 0 , x.c_str() , x.size() , &Wstring , 0 );
最后一行产生编译器错误:
'MultiByteToWideChar' : cannot convert parameter 5 from 'std::wstring *' to 'LPWSTR'
如何解决此错误?
另外,参数
cchWideChar
的值应该是什么? 0还可以吗? 最佳答案
您必须两次调用MultiByteToWideChar
:
MultiByteToWideChar
用于查找宽字符串所需的缓冲区大小。看Microsoft's documentation;它指出:因此,要使
MultiByteToWideChar
提供所需的大小,请传递0作为最后一个参数cchWideChar
的值。您还应该传递NULL
作为它之前的lpWideCharStr
。 MultiByteToWideChar
的调用。这次,最后一个参数应该是缓冲区的实际大小,而不是0。一个粗略的例子:
int wchars_num = MultiByteToWideChar( CP_UTF8 , 0 , x.c_str() , -1, NULL , 0 );
wchar_t* wstr = new wchar_t[wchars_num];
MultiByteToWideChar( CP_UTF8 , 0 , x.c_str() , -1, wstr , wchars_num );
// do whatever with wstr
delete[] wstr;
另外,请注意使用-1作为
cbMultiByte
参数。这将使结果字符串以null终止,从而使您无需处理它们。