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可以使用。