// ----------------------------------------------------------------------------
// Description:
// This function maps a character string to a wide-character(Unicode) string
//
// Parameters:
// lpcszStr: [in] Pointer to the character string to be converted
// lpwszStr: [out] Pointer to a buffer that receives the translated string
// dwSize: [in] Size of the buffer
//
// Return Values:
// TRUE : Succeed
// FALSE: Failed
//
// Example:
// MByteToWChar(szA, szW, sizeof(szW) / sizeof(szW[0]));
// ----------------------------------------------------------------------------
BOOL MByteToWChar(LPCSTR lpcszStr, LPWSTR lpwszStr, DWORD dwSize)
{
// Get the required size of the buffer that receives the Unicode string.
DWORD dwMinSize;
dwMinSize = MultiByteToWideChar(CP_ACP, 0, lpcszStr, -1, NULL, 0);
if(dwSize < dwMinSize)
return FALSE;
// Convert headers from ASCII to Unicode.
MultiByteToWideChar(CP_ACP, 0, lpcszStr, -1, lpwszStr, dwMinSize);
return TRUE;
}
// ----------------------------------------------------------------------------
// Description
// This function maps a wide-character string to a new character string
//
// Parameters:
// lpcwszStr: [in] Pointer to the character string to be converted
// lpszStr: [out] Pointer to a buffer that receives the translated string.
// dwSize: [in] Size of the buffer
//
// Return Values:
// TRUE: Succeed
// FALSE: Failed
//
// Example:
// WCharToMByte(szw, szA, sizeof(szA) / sizeof(szA[0]));
// ----------------------------------------------------------------------------
BOOL WCharToMByte(LPCWSTR lpcwszStr, LPSTR lpszStr, DWORD dwSize)
{
DWORD dwMinSize;
dwMinSize = WideCharToMultiByte(CP_OEMCP, NULL, lpcwszStr, -1, NULL, 0, NULL, FALSE);
if(dwSize < dwMinSize)
return FALSE;
WideCharToMultiByte(CP_OEMCP, NULL, lpcwszStr, -1, lpszStr, dwSize, NULL, FALSE);
return TRUE;
}
// 这两个函数的求缺点在于无法动态分配内存,在转换很长的字符串时可能会浪费
// 较多内存空间;优点是,在不考虑浪费空间的情况下转换较短的字符串非常方便
/*
**********************************************************************
* 函数:TransCStringToTCHAR
* 描述: 将CString转换为TCHAR*
* 日期: 2017/5/20
**********************************************************************
*/
TCHAR* CPublic::CString2TCHAR(CString &str)
{
// 将最后的'\0'也计算在长度内
int iLen = str.GetLength();
TCHAR* szRs = new TCHAR[iLen];
lstrcpy(szRs, str.GetBuffer(iLen));
str.ReleaseBuffer();
return szRs;
}
/*
**********************************************************************
* 函数:TCHAR2char
* 描述:将TCHAR*转换为char*
* 日期: 2017/5/20
**********************************************************************
*/
char* CPublic::TCHAR2char(TCHAR* tchStr)
{
int iLen = 2 * wcslen(tchStr);
char* chRtn = new char[iLen + i];
wcstombs(chRtn, tchStr, iLen + 1);
return chRtn;
}
/*
**********************************************************************
*函数: CString2char
*描述: 将CString转换为char*
*日期: 2017/5/20
**********************************************************************
*/
char* CPublic::CString2char(CString &str)
{
int iLen = str.GetLength();
// CString的长度中汉字算一个长度
char* chRtn = (char*)malloc((iLen * 2 + 1) * sizeof(char));
memset(chRtn, 0, 2 * iLen + 1);
USES_CONVERSION;
strcpy((LPSTR)chRtn, OLE2A(str.LoadString()));
return chRtn;
}
/*
**********************************************************************
*函数名: GetAnsiString
*描述: 将CString(Unicode)转换为char*(ANSI)
*参数: CString &str要转换的CString
*返回值: 返回转换结果
*创建日期:2017/5/20
**********************************************************************
*/
char* GetAnsiString(const CString &str)
{
int nSize = 2 * str.GetLength();
char *pAnsiString = new char[nSize + 1];
wcstombs(pAnsiString, str, nSize + 1);
return pAnsiString;
}
MByteToWChar WCharToMByte
最新推荐文章于 2021-05-06 08:57:44 发布