MByteToWChar WCharToMByte

来源:互联网 发布:怎样注册农村淘宝网店 编辑:程序博客网 时间:2024/05/19 06:47
// ----------------------------------------------------------------------------// 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;}
原创粉丝点击