1. 程式人生 > >unicode WCHAR 與多字符集char相互轉換

unicode WCHAR 與多字符集char相互轉換

多字符集轉UNICODE字符集:

//mbs(char) to wcs (CString)
//多字符集轉為UNICODE字符集
CString mbs2wcs(LPCSTR mbstr)
{
	CString cstr = L"";	
	size_t aLen = strlen(mbstr) + 1;
	int wLen = MultiByteToWideChar(CP_ACP, 0, mbstr, aLen, NULL, 0);//最後一個引數為0,先計算出轉化所需的寬字元數
	LPOLESTR lpw = new WCHAR[wLen];	//再申請(返回的寬字元數)個緩衝區
	MultiByteToWideChar(CP_ACP, 0, mbstr, aLen, lpw,wLen);	//將多字符集轉換到WCHAR的緩衝區
	cstr.Append(lpw);	//將緩衝區的內容追加到cstr,待返回
	delete[] lpw;		//釋放緩衝區記憶體
	lpw = NULL;			//將緩衝區指標設定為空
	return cstr;
}
UNICODE字符集轉Multi字符集:
/************************************************************************/
/*
	UNICODE字符集轉多字符集 char
		
*/
/************************************************************************/
VOID wcs2mbs(LPCOLESTR wcstr, char* chResult)
{
	size_t wLen = wcslen(wcstr) + 1;  // 寬字元字元長度,+1表示包含字串結束符
	int aLen = WideCharToMultiByte(CP_ACP, 0, wcstr, wLen, NULL, 0, NULL, NULL); //第六個引數為0,返回轉換所需的char型字元數

	LPSTR lpa = new char[aLen];	//申請緩衝區
	WideCharToMultiByte(CP_ACP, 0, wcstr, wLen, lpa, aLen, NULL, NULL);	//將UNICODE字符集轉換到char型緩衝區
	strcpy_s(chResult, 200, lpa);	//記憶體拷貝
	delete[] lpa;		//釋放緩衝區記憶體
	lpa = NULL;		//緩衝區記憶體指標設定為null
}