📜  c++ pwstr to char* - C++ (1)

📅  最后修改于: 2023-12-03 14:59:45.215000             🧑  作者: Mango

C++ - 将 PWSTR 转换为 char*

在 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() 函数即可。当然,需要注意字符编码和内存释放等问题。