MFC中,使用宏区分Unicode还是ASCI,Const Char* 转换char*的代码及讲解
时间: 2024-05-02 18:17:29 浏览: 176
MFC编写的字符和Unicode相互转换
5星 · 资源好评率100%
在MFC中,我们可以使用宏 `UNICODE` 来判断当前字符集是 Unicode 还是 ASCII。
当 `UNICODE` 宏被定义时,字符串类型为 `wchar_t*`,即宽字符类型。当 `UNICODE` 宏没有被定义时,字符串类型为 `char*`,即窄字符类型。
下面是一个示例代码,演示了如何使用宏 `UNICODE` 来进行编译时判断,并将 `const char*` 转换为 `char*`。
```cpp
#ifdef UNICODE
typedef wchar_t TCHAR;
#define _T(x) L##x
#else
typedef char TCHAR;
#define _T(x) x
#endif
char* ConvertToChar(const TCHAR* str)
{
int nLen = ::WideCharToMultiByte(CP_ACP, 0, str, -1, NULL, 0, NULL, NULL);
char* pResult = new char[nLen];
::WideCharToMultiByte(CP_ACP, 0, str, -1, pResult, nLen, NULL, NULL);
return pResult;
}
```
在上述代码中,我们定义了 `TCHAR` 类型,它根据 `UNICODE` 宏的定义而变化。同时,我们使用 `_T()` 宏来将字符串字面值转换为 `wchar_t*` 或 `char*` 类型的字符串。在 `ConvertToChar()` 函数中,我们使用 `WideCharToMultiByte()` 函数将宽字符转换为窄字符。
需要注意的是,在转换完成后,需要手动释放 `char*` 指针所占用的内存,以避免内存泄漏问题。
阅读全文