#include
CString str = _T("123abc汉字~~");
std::string sData = "123";
WCharToChar(CP_ACP,str.GetBuffer(),sData);
str.ReleaseBuffer();
str = _T("");
std::wstring strTemp;
CharToWChar(CP_ACP,sData,strTemp);
str = strTemp.c_str();
AfxMessageBox(str);
————————————————————————————
// 在开辟内存的时候长度为MAX_PATH是因为我写到这里的时候数据不大
// 如果数据量大要自行修改
/**********************************************************/
// 宽字符转窄字符
/**********************************************************/
int CTStartDlg::WCharToChar(UINT PageCode, std::wstring strWChar, std::string &strChar)
{
/* WideCharToMultiByte说明:
映射一个unicode字符串到一个多字节字符串。
CodePage:指定执行转换的代码页,为系统已安装或有效的任何代码页所给定的值。你也可以指定为下面的一个值:
CP_ACP:ANSI代码页;CP_MACCP:Macintosh代码页;CP_OEMCP:OEM代码页;
CP_SYMBOL:符号代码页(42);CP_THREAD_ACP:当前线索ANSI代码页;
CP_UTF7:使用UTF-7转换;CP_UTF8:使用UTF-8转换。
*/
strChar = "";
int ret = 0;
int nSize = (int)strWChar.length() * 2;
static char pszTemp[MAX_PATH];
if( pszTemp )
{
memset( pszTemp, 0, nSize+1 );
ret = WideCharToMultiByte( PageCode, NULL, strWChar.c_str(), -1, pszTemp,nSize, NULL, FALSE );
pszTemp[nSize] = '/0';
strChar = pszTemp;
}
return ret;
}
/**********************************************************/
// 窄字符转宽字符
/**********************************************************/
int CTStartDlg::CharToWChar(UINT PageCode, std::string strChar, std::wstring &strWChar)
{
strWChar = "";
int ret = 0;
static wchar_t pszTemp[MAX_PATH];
if( pszTemp )
{
memset( pszTemp, 0, (strChar.length()+1)*sizeof(wchar_t) );
ret = MultiByteToWideChar( PageCode, 0, strChar.c_str(), -1, pszTemp, (int)strChar.length() );
pszTemp[strChar.length()] = L'/0';
strWChar = pszTemp;
}
return ret;
}