|  | 
 
| VC++MFC在UNICODE下,TCHAR*与const char*相互转换 在VC++ MFC的Unicode环境下, `TCHAR*`  和  `const char*`  之间的转换需要注意字符编码的不同。以下是如何在Unicode模式下进行这两种类型的相互转换。
 ### 1.  `const char*`  转换为  `TCHAR*`
 在Unicode模式下, `TCHAR`  实际上被定义为  `wchar_t` ,因此需要将  `const char*` (通常是UTF-8或ASCII编码)转换为  `wchar_t*` 。可以使用  `MultiByteToWideChar`  函数进行转换。
 
 复制代码#include <windows.h>
#include <atlstr.h> // 包含CString的定义
 TCHAR* ConvertCharToTCHAR(const char* charStr) {
    // 获取所需的缓冲区大小
    int sizeNeeded = MultiByteToWideChar(CP_UTF8, 0, charStr, -1, NULL, 0);
    TCHAR* tcharStr = new TCHAR[sizeNeeded]; // 创建缓冲区
    MultiByteToWideChar(CP_UTF8, 0, charStr, -1, tcharStr, sizeNeeded);
    return tcharStr; // 返回转换后的TCHAR*
}
 // 使用示例
int main() {
    const char* myCharStr = "Hello, World!";
    TCHAR* myTCHARStr = ConvertCharToTCHAR(myCharStr);
    // 使用myTCHARStr
    delete[] myTCHARStr; // 释放内存
    return 0;
}
 ### 2.  `TCHAR*`  转换为  `const char*`
 将  `TCHAR*`  转换为  `const char*`  也需要使用  `WideCharToMultiByte`  函数。在Unicode模式下, `TCHAR`  是  `wchar_t` ,因此需要进行相应的转换。
 
 复制代码#include <windows.h>
#include <atlstr.h> // 包含CString的定义
 const char* ConvertTCHARToChar(const TCHAR* tcharStr) {
    // 获取所需的缓冲区大小
    int sizeNeeded = WideCharToMultiByte(CP_UTF8, 0, tcharStr, -1, NULL, 0);
    char* charStr = new char[sizeNeeded]; // 创建缓冲区
    WideCharToMultiByte(CP_UTF8, 0, tcharStr, -1, charStr, sizeNeeded, NULL, NULL);
    return charStr; // 返回转换后的const char*
}
 // 使用示例
int main() {
    TCHAR* myTCHARStr = L"Hello, World!"; // 注意在Unicode模式下使用L前缀
    const char* myCharStr = ConvertTCHARToChar(myTCHARStr);
    // 使用myCharStr
    delete[] myCharStr; // 释放内存
    return 0;
}
 ### 注意事项
 - 在进行转换时,确保输入的字符串是有效的,并且以NULL结尾。
 - 处理完毕后,记得释放动态分配的内存,避免内存泄漏。
 - 在Unicode模式下,使用  `CString`  可以简化字符串的管理和转换。
 通过以上方法,你可以在VC++ MFC的Unicode环境下实现  `TCHAR*`  和  `const char*`  之间的相互转换。
 
 
 | 
 |