|
VC++在UNICODE下,LPCTSTR转为string
在VC++中,如果你想将 `LPCTSTR` (在Unicode下是 `const wchar_t*` )转换为 `std::string` ,你需要先将宽字符字符串转换为窄字符字符串。这可以通过使用 `WideCharToMultiByte` 函数来实现。以下是一个示例代码,演示如何完成这个转换:
### 示例代码
- #include <afx.h>
- #include <iostream>
- #include <string>
- #include <windows.h>
- std::string ConvertLPCTSTRToString(LPCTSTR lpctstr) {
- // 获取宽字符字符串的长度
- int length = lstrlen(lpctstr);
- // 计算转换所需的缓冲区大小
- int bufferSize = WideCharToMultiByte(CP_ACP, 0, lpctstr, length, NULL, 0, NULL, NULL);
- // 分配缓冲区
- char* buffer = new char[bufferSize + 1]; // +1用于字符串结束符
- // 执行转换
- WideCharToMultiByte(CP_ACP, 0, lpctstr, length, buffer, bufferSize, NULL, NULL);
- buffer[bufferSize] = '\0'; // 添加结束符
- // 将结果转换为std::string
- std::string result(buffer);
- // 释放分配的内存
- delete[] buffer;
- return result;
- }
- int main() {
- // 创建一个LPCTSTR类型的字符串
- LPCTSTR lpctstr = _T("Hello, World!");
- // 转换为std::string
- std::string str = ConvertLPCTSTRToString(lpctstr);
- // 输出结果
- std::cout << "转换后的字符串: " << str << std::endl;
- return 0;
- }
复制代码
### 代码说明
1. **函数 `ConvertLPCTSTRToString` **:
- 该函数接收一个 `LPCTSTR` 类型的参数。
- 使用 `lstrlen` 获取字符串的长度。
- 使用 `WideCharToMultiByte` 计算转换所需的缓冲区大小。
- 分配一个字符数组以存储转换后的字符串。
- 再次调用 `WideCharToMultiByte` 进行实际的转换,并在末尾添加字符串结束符。
- 将结果转换为 `std::string` 并返回。
2. ** `main` 函数**:
- 创建一个 `LPCTSTR` 类型的字符串。
- 调用 `ConvertLPCTSTRToString` 函数进行转换。
- 输出转换后的字符串。
### 注意事项
- 确保在项目中正确配置了 MFC 库,并使用 Unicode 编码。
- 处理完字符串后,记得释放分配的内存,以避免内存泄漏。
|
|