char TCHAR WCHAR区别 与 转换
#ifdef UNICODE
typedef wchar_t TCHAR;
#else
typedef unsigned char TCHAR;
#endif
typedef unsigned char CHAR;
typedef unsigned wchar_t WCHAR;
typedef wchar_t TCHAR;
#else
typedef unsigned char TCHAR;
#endif
typedef unsigned char CHAR;
typedef unsigned wchar_t WCHAR;
因此,TCHAR 在 UNICODE 下为 sizeof(TCHAR) = 2 字节 ,否则 sizeof(TCHAR)= 1 字节 (8位).
/*
** char* --> TCHAR **
*/
char szFind[MAX_PATH];
int actcnt = MultiByteToWideChar(CP_ACP, NULL, szFind, - 1, NULL, 0); // 计算转换后所需大小
TCHAR * pbuffer = new TCHAR[actcnt + 1];
memset(pbuffer, 0, sizeof(pbuffer));
MultiByteToWideChar(CP_ACP, NULL, szFind, - 1, pbuffer, actcnt); // 转换
// 现在pbuffer 可以使用。
char szFind[MAX_PATH];
int actcnt = MultiByteToWideChar(CP_ACP, NULL, szFind, - 1, NULL, 0); // 计算转换后所需大小
TCHAR * pbuffer = new TCHAR[actcnt + 1];
memset(pbuffer, 0, sizeof(pbuffer));
MultiByteToWideChar(CP_ACP, NULL, szFind, - 1, pbuffer, actcnt); // 转换
// 现在pbuffer 可以使用。
...
相反的转换:
/*** WCHAR --> char* ***/
// WIN32_FIND_DATA FindFileData;
DWORD dwMinSize = WideCharToMultiByte (CP_OEMCP, NULL, FindFileData.cFileName ,- 1, NULL, 0, NULL, 0); // 计算所需大小
char *cTemp = new char[dwMinSize + 1];
memset(cTemp, 0 , sizeof(cTemp));
WideCharToMultiByte (CP_OEMCP, NULL, FindFileData.cFileName ,- 1, cTemp, sizeof(FindFileData.cFileName)/ sizeof(FindFileData.cFileName[ 0]), NULL, 0); // 转换
// 现在cTemp 可以使用。
// WIN32_FIND_DATA FindFileData;
DWORD dwMinSize = WideCharToMultiByte (CP_OEMCP, NULL, FindFileData.cFileName ,- 1, NULL, 0, NULL, 0); // 计算所需大小
char *cTemp = new char[dwMinSize + 1];
memset(cTemp, 0 , sizeof(cTemp));
WideCharToMultiByte (CP_OEMCP, NULL, FindFileData.cFileName ,- 1, cTemp, sizeof(FindFileData.cFileName)/ sizeof(FindFileData.cFileName[ 0]), NULL, 0); // 转换
// 现在cTemp 可以使用。