📅  最后修改于: 2023-12-03 14:59:45.215000             🧑  作者: Mango
在 Windows 中,经常会使用字符串类型 PWSTR
储存 Unicode 字符串,而有时候需要将其转换为 char*
格式的 ANSI 字符串,下面就介绍一种实现方法。
使用 C++ WinAPI 中提供的 WideCharToMultiByte()
函数,该函数可将 Unicode 编码转换为多字节编码,也就可以将 PWSTR
(Unicode)字符串转换为 char*
(ANSI)格式。
char* PWSTR_To_Char(LPCWSTR pwstr) {
int length = WideCharToMultiByte(CP_ACP, 0, pwstr, -1, NULL, 0, NULL, NULL);
char* str = new char[length + 1];
WideCharToMultiByte(CP_ACP, 0, pwstr, -1, str, length, NULL, NULL);
return str;
}
上面的代码中使用了 WideCharToMultiByte()
函数,其中 CP_ACP
表示 ANSI 代码页,0
表示使用默认标志,pwstr
是要转换的字符串,-1
表示转换整个字符串,NULL
代表不获取每个字符所采用的策略。
#include <Windows.h>
#include <iostream>
int main() {
PWSTR pwstr = L"Hello, world! 这是一个测试。";
char *msg = PWSTR_To_Char(pwstr);
std::cout << msg << std::endl;
delete[] msg;
return 0;
}
上面的代码使用了 PWSTR_To_Char()
函数将 Unicode 字符串转换为 ANSI 字符串,并输出结果。
以上就是将 PWSTR
类型字符串转换为 char*
的方法,只需要调用 WideCharToMultiByte()
函数即可。当然,需要注意字符编码和内存释放等问题。