几个字符串转换函数(ANSI-->Unicode)

都是WINAPI : MultiByteToWideChar的各种应用!

 

纯C++非MFC版:

		/// <summary>
		/// 字符串转换函数(ANSI-->Unicode)
		/// </summary>
		/// <param name="lpMultiByteStr"> 被转换的ANSI字符串 </param> 
		/// <param name="lpWideCharStr"> 接收Unicode字符串的地址,内部初始化 </param> 
		/// <returns>
		/// The function returns 0 if it does not succeed.
		/// Returns the number of characters written to the buffer indicated by lpWideCharStr if successful
		/// </returns>
		/// <remarks>
		/// </remarks>
		static int MByteToWChar(const char* lpMultiByteStr, std::unique_ptr<wchar_t>& lpWideCharStr)
		{
			// Get the required size of the buffer that receives the Unicode string.
			// If the function succeeds(!=0) and cchWideChar is 0, the return value 
			// is the required size, in characters, for the buffer indicated by lpWideCharStr. 
			DWORD dwMinSize  = MultiByteToWideChar (CP_ACP, 0, lpMultiByteStr, -1, NULL, 0);
			if ( dwMinSize == 0 ){return 0;}

			lpWideCharStr.reset( new wchar_t[dwMinSize] );

			// Convert headers from ASCII to Unicode.
			return MultiByteToWideChar (CP_ACP, 0, lpMultiByteStr, -1, lpWideCharStr.get(), dwMinSize);
		}

 

 

MFC库源代码版:

int __stdcall CMFCControlContainer::UTF8ToString(LPCSTR lpSrc, CString& strDst, int nLength)
{
	LPTSTR lpDst = NULL;
	int count = ::MultiByteToWideChar(CP_UTF8, 0, lpSrc, nLength, NULL, 0);
	if (count <= 0)
	{
		return 0;
	}

	LPWSTR lpWide = new WCHAR[count + 1];
	memset(lpWide, 0, (count + 1) * sizeof(WCHAR));

	::MultiByteToWideChar(CP_UTF8, 0, lpSrc, nLength, lpWide, count);

#ifdef _UNICODE
	lpDst = lpWide;
#else
	count = ::WideCharToMultiByte(::GetACP(), 0, lpWide, -1, NULL, 0, NULL, 0);

	if (count > 0)
	{
		lpDst = new char[count + 1];
		memset(lpDst, 0, count + 1);

		::WideCharToMultiByte(::GetACP(), 0, lpWide, -1, lpDst, count, NULL, 0);
	}

	delete [] lpWide;
#endif

	strDst = lpDst;
	delete[] lpDst;
	return count;
}

 

 

MFC版本:

	char* p = "abc";
	CString strW(p);



 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值