MByteToWChar WCharToMByte


// ----------------------------------------------------------------------------
// 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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值