unicode WCHAR 与多字符集char相互转换

时间:2023-01-24 19:30:37

多字符集转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
}