c++中 LPCTSTR 如何和string相互转换?
时间: 2023-07-26 16:07:59 浏览: 573
LPCTSTR 是指向 const TCHAR 的指针,而 TCHAR 可以是 wchar_t 或 char,所以在转换时需要考虑字符集的问题。
下面是将 LPCTSTR 转换为 std::string 的代码:
```c++
#include <string>
#include <windows.h> // 包含 TCHAR 和 LPCTSTR 的定义
std::string lpcstrToString(LPCTSTR lpcstr) {
int len = WideCharToMultiByte(CP_ACP, 0, lpcstr, -1, nullptr, 0, nullptr, nullptr);
std::string str(len, 0);
WideCharToMultiByte(CP_ACP, 0, lpcstr, -1, &str[0], len, nullptr, nullptr);
return str;
}
```
这里使用了 Windows API 函数 WideCharToMultiByte 将宽字符转换为多字节字符,其中 CP_ACP 表示使用当前 ANSI 代码页。
下面是将 std::string 转换为 LPCTSTR 的代码:
```c++
#include <windows.h> // 包含 TCHAR 和 LPCTSTR 的定义
LPCTSTR stringToLpcstr(const std::string& str) {
int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, nullptr, 0);
std::wstring wstr(len, 0);
MultiByteToWideChar(CP_ACP, 0, str.c_str(), -1, &wstr[0], len);
return wstr.c_str();
}
```
这里使用了 Windows API 函数 MultiByteToWideChar 将多字节字符转换为宽字符,其中 CP_ACP 表示使用当前 ANSI 代码页。注意返回的是 wstr.c_str(),因为 LPCTSTR 是指向 const TCHAR 的指针,所以需要将 std::wstring 转换为 const wchar_t*。
阅读全文