unicode WCHAR 與多字符集char相互轉換
阿新 • • 發佈:2019-01-03
多字符集轉UNICODE字符集:
UNICODE字符集轉Multi字符集://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字符集轉多字符集 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 }