CString 和 std::string在unicode下比较安全的转换方向[续]

前面的方法在服务中使用会有些内存泄漏的问题,这在服务器程序中是不允许的,现提供一种比较安全的方法

1.添加两个函数
//宽字符和窄字符的互转
int WCharToChar(UINT PageCode, std::wstring strWChar, std::string &strChar)
{
 strChar.clear();
 int ret = 0;
 int nSize = (int)strWChar.length()*2;
 static char pszDest[1024*10];
 if( pszDest )
 {
  memset( pszDest, 0, nSize+1 );
  ret = WideCharToMultiByte(PageCode,NULL,strWChar.c_str(),-1,pszDest,nSize,NULL,FALSE);
  pszDest[nSize] = '/0';
  strChar = pszDest;
 }
 return ret;
}

int CharToWChar(UINT PageCode, std::string strChar, std::wstring &strWChar)
{
 strWChar.clear();
 int ret = 0;
 //wchar_t *pszDest = new wchar_t[strChar.length()+1];
 static wchar_t pszDest[1024*10];
 if( pszDest )
 {
  memset( pszDest, 0, (strChar.length()+1)*sizeof(wchar_t) );
  ret = MultiByteToWideChar(PageCode, 0, strChar.c_str(), -1, pszDest, (int)strChar.length());
  pszDest[strChar.length()] = L'/0';
  strWChar = pszDest;
 }
 return ret;

2.使用方法:
CString strWString ; //在unicode下是宽字符
std::string strString;
(1)CString转为std::string
WCharToChar( CP_ACP, strWString .GetBuffer(), strString);
(2)std::string转为CString
std::wstring strTemp;
CharToWChar( CP_ACP, strString, strTemp );
strWString  = strTemp .c_str();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值