原文地址:
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
}