CString 和 std::string 转换方法(Unicode下)

#include <string>

 

 

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;

}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值