Windows下char与TCHAR(WCHAR)相互转换

原文地址: http://blog.csdn.net/temotemo/article/details/7464445
/* 包含头文件WinNls.h用到WINBASEAPI函数
   函数原型
int
WINAPI
MultiByteToWideChar(
    __in UINT     CodePage,
    __in DWORD    dwFlags,
    __in_bcount(cbMultiByte) LPCSTR   lpMultiByteStr,
    __in int      cbMultiByte,
    __out_ecount_opt(cchWideChar) __transfer(lpMultiByteStr) LPWSTR  lpWideCharStr,
    __in int      cchWideChar);

int
WINAPI
WideCharToMultiByte(
    __in UINT     CodePage,
    __in DWORD    dwFlags,
    __in_ecount(cchWideChar) LPCWSTR  lpWideCharStr,
    __in int      cchWideChar,
    __out_bcount_opt(cbMultiByte) __transfer(lpWideCharStr) LPSTR   lpMultiByteStr,
    __in int      cbMultiByte,
    __in_opt LPCSTR   lpDefaultChar,
    __out_opt LPBOOL  lpUsedDefaultChar);
*/

// 把char *转换为TCHAR *或WCHAR *
TCHAR convertTemp1[256] = {0};
TCHAR convertTemp2[256] = {0};
bool convertBufferSwitch(false);
TCHAR* CharToTchar(const char* str, int len)
{
	#ifdef _UNICODE 
	TCHAR* temp = convertBufferSwitch ? convertTemp1 : convertTemp2; 
	convertBufferSwitch = !convertBufferSwitch; 
	memset(temp, 0, sizeof(convertTemp1)); 
	MultiByteToWideChar(CP_UTF8, 0, str, len, temp, 256); 
	return temp;
	#else 
	return str;
	#endif
}

// // 把TCHAR *或WCHAR *转换为char *
char convertTemp3[256] = {0};
char* TcharToChar(TCHAR* str, int len)
{
	#ifdef _UNICODE 
	memset(convertTemp3, 0, sizeof(convertTemp3)); 
	WideCharToMultiByte(CP_UTF8, 0, str, len, convertTemp3, 256, 0, 0); 
	return convertTemp3;
	#else 
	return str;
	#endif
}

你可能感兴趣的:(windows)