gb2312-unicode(ucs2)

BOOL UCS2_TO_GB2312(std::string &dst, LPCWSTR src)
{
	const UINT CP_GB2312 = 936;
	BOOL IsOk;
	LONG nBytes;

	IsOk = FALSE;
	nBytes = WideCharToMultiByte(CP_GB2312, 0, src, -1, NULL, 0, NULL, NULL);
	if (nBytes > 0)
	{
		HANDLE hHeapHandle = GetProcessHeap();

		if (LPSTR mb = reinterpret_cast<LPSTR>(HeapAlloc(hHeapHandle, HEAP_ZERO_MEMORY, nBytes)))
		{
			if (WideCharToMultiByte(CP_GB2312, 0, src, -1, mb, nBytes, NULL, NULL) == nBytes)
			{
				dst.append(mb);
				IsOk = TRUE;
			}
			HeapFree(hHeapHandle, 0, mb);
		}
	}
	return IsOk;
}

BOOL GB2312_TO_UCS2(std::wstring &dst, LPCSTR src)
{
	const UINT CP_GB2312 = 936;
	BOOL IsOk;
	LONG nCharacters;

	IsOk = FALSE;
	nCharacters = MultiByteToWideChar(CP_GB2312, 0, src, -1, NULL, 0);
	if (nCharacters > 0)
	{
		HANDLE hHeapHandle = GetProcessHeap();

		if (LPWSTR wc = reinterpret_cast<LPWSTR>(HeapAlloc(hHeapHandle, HEAP_ZERO_MEMORY, nCharacters * sizeof(wchar_t))))
		{
			if (MultiByteToWideChar(CP_GB2312, 0, src, -1, wc, nCharacters) == nCharacters)
			{
				dst.append(wc);
				IsOk = TRUE;
			}
			HeapFree(hHeapHandle, 0, wc);
		}
	}
	return IsOk;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值