gpt4 book ai didi

c++ - 如何使用 MultiByteToWideChar?

转载 作者:IT老高 更新时间:2023-10-28 22:17:20 27 4
gpt4 key购买 nike

我想将普通的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 两次:

  1. 第一次调用 MultiByteToWideChar 用于查找宽字符串所需的缓冲区大小。看Microsoft's documentation ;它指出:

    If the function succeeds and cchWideChar is 0, the return value is the required size, in characters, for the buffer indicated by lpWideCharStr.

    因此,要使 MultiByteToWideChar 为您提供所需的大小,请将 0 作为最后一个参数 cchWideChar 的值传递。您还应该传递 NULL 作为它之前的一个,lpWideCharStr

  2. 使用上一步中的缓冲区大小,获取足够大的非常量缓冲区以容纳宽字符串。将此缓冲区传递给对 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 结尾,从而使您免于处理它们。

关于c++ - 如何使用 MultiByteToWideChar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6693010/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com