<强> c++宽字符与普通字符的转换实例详解强>
把字符串转换成宽字符串,
实例代码:
wstring string2Wstring(字符串sToMatch) { # ifdef _A_WIN int iWLen=MultiByteToWideChar (CP_ACP 0 sToMatch.c_str (), sToMatch.size (), 0, 0);//计算转换后宽字符串的长度。(不包含字符串结束符) wchar_t * lpwsz=新wchar_t (iWLen + 1); MultiByteToWideChar (CP_ACP 0 sToMatch.c_str (), sToMatch.size (), lpwsz, iWLen);//正式转换。 lpwsz [iWLen]=L '/0 '; wstring wsToMatch (lpwsz); 删除[]lpwsz; # elif _A_LINUX setlocale (LC_CTYPE”、“);//很重要,没有这一句,转换会失败。 int iWLen=mbstowcs (NULL, sToMatch.c_str (), sToMatch.length ());//计算转换后宽字符串的长度。(不包含字符串结束符) wchar_t * lpwsz=新wchar_t (iWLen + 1); int i=mbstowcs (lpwsz sToMatch.c_str (), sToMatch.length ());//转换。(转换后的字符串有结束符) wstring wsToMatch (lpwsz); 删除[]lpwsz; # endif 返回wsToMatch; }//把宽字符串转换成字符串,输出使用 字符串wstring2string (wstring sToMatch) { # ifdef _A_WIN 字符串sResult; int iLen=WideCharToMultiByte (CP_ACP, NULL, sToMatch.c_str (), 1, NULL, 0, NULL,假);//计算转换后字符串的长度。(包含字符串结束符) char * lpsz=new char [iLen]; WideCharToMultiByte (CP_OEMCP NULL, sToMatch.c_str (), 1, lpsz, iLen, NULL,假);//正式转换。 sResult。分配(lpsz iLen - 1);//对字符串对象进行赋值。 删除[]lpsz; # elif _A_LINUX int iLen=wcstombs (NULL, sToMatch.c_str (), 0);//计算转换后字符串的长度。(不包含字符串结束符) char * lpsz=new char [iLen + 1]; int i=wcstombs (lpsz sToMatch.c_str (), iLen);//转换。(没有结束符) lpsz [iLen]='/0 '; 字符串sResult (lpsz); 删除[]lpsz; # endif 返回sResult; }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!