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
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章