gpt4 book ai didi

c++ - PWCHAR 转字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:54:33 27 4
gpt4 key购买 nike

如标题所述,我需要一种将 PWCHAR 转换为 std::string 的方法。我可以在网上找到的唯一解决方案是用于相反的转换,所以如果有人能对此有所了解,我真的很喜欢。谢谢!

这是在 C++ 中。

最佳答案

根据 this MSDN page , PWCHAR 声明如下:

typedef wchar_t WCHAR, *PWCHAR;

你要的是std::wstring, declared in string .

const PWCHAR pwc;
std::wstring str(pwc);

std::wstringstd::string 非常相似,因为两者都是 std::basic_string 的特化;区别在于wstring使用wchar_t(Windows WCHAR),而string使用char.


如果您真的想要一个string(并且不是一个wstring),建议的C++方法是使用 use_facet如所见here :

const std::locale locale("C");
const std::wstring src = ...;
const std::string dst = ...;
std::use_facet<std::ctype<wchar_t> >(loc)
.narrow(src.c_str(), src.c_str() + src.size(), '?', &*dst.begin());

您也可以单独转换为多字节 C 字符串,然后使用它来构建您的 std::string。但是,这不是在 C++ 中执行此操作的首选方法。执行此操作的函数是 wcstombs , 如下声明:

size_t wcstombs ( char * mbstr, const wchar_t * wcstr, size_t max );

因为你在 Windows 上,你也可以使用 WideCharToMultiByte对于这一步。

int WideCharToMultiByte(
__in UINT CodePage,
__in DWORD dwFlags,
__in LPCWSTR lpWideCharStr,
__in int cchWideChar,
__out_opt LPSTR lpMultiByteStr,
__in int cbMultiByte,
__in_opt LPCSTR lpDefaultChar,
__out_opt LPBOOL lpUsedDefaultChar
);

LPSTR 根据MSDN定义如下:

typedef CHAR *LPSTR;
typedef char CHAR;

关于c++ - PWCHAR 转字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11854336/

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