C++多字节字符与宽字节字符相互转换



#pragma once
class StrTransfer
{
 StrTransfer();
 virtual ~ StrTransfer();
 char   * TCHAR2char(wchar_t* wc);//宽字节转单字节;
 wchar_t* char2THCAR(char* c); //单字节转宽字节 ;
 void Release();//释放资源 ;
private:
 char* m_char;
 wchar_t* m_wchar;
};

/
/*字符类型 wchar_t char
/*获取字符长度 wcslen() strlen()
/*连接两个字符串 wcscat() strcpy()
/*复制字符串 wcscpy() strcpy()
/*比较两个字符串 wcscmp() strcmp()
/*具体参数详见www.linuxidc.com*/

#include "StdAfx.h"
#include "StrTransfer.h"
StrTransfer::StrTransfer()
 :m_char(NULL)
 ,m_wchar(NULL)
{

}

StrTransfer::~StrTransfer()
{
 Release();
}
char *  StrTransfer::TCHAR2char(TCHAR * tchstr)
{
 if(tchstr == 0)
  return 0;
 Release();
int len= WideCharToMultiByte(CP_ACP, 0, tchstr, -1, 0, 0, 0, 0); 
m_char=new char[len+1]; 
WideCharToMultiByte(CP_ACP,0,tchstr,-1,m_char,len,NULL,NULL); 
m_char[len]='\0';
 return m_char;
}

TCHAR *  StrTransfer::char2THCAR(char * str)
{
 if(str == 0)
  return 0;
 Release();
int len = MultiByteToWideChar(CP_ACP,0,str,-1,NULL,0); 
m_wchar=new wchar_t[len+1]; 
MultiByteToWideChar(CP_ACP,0,str,-1,m_wchar,len); 
m_wchar[len]='\0';
 return m_wchar;

}
void StrTransfer::Release()
{
 if(m_char)
 {
  delete m_char;
  m_char=NULL;
 }
 if(m_wchar)
 {
  delete m_wchar;
  m_wchar=NULL;
 }
}


使用的时候非常简单了:省去了释放资源的麻烦 ;使用时注意每次转换上原来的空间已被删除不能再利用,小心野的出现指针.

尤其像sprintf,CString::Format格式化多个字符串是每一个需要个转换的字符串都需定义一个对象去处理

复制代码 代码如下:

WCHAR* wc=findData.cFileName;
StrTransfer u;
char* c=u.WcharToChar(wc);
cout<<c<<endl;
CUser u;
char* pBuffer=u.WcharToChar(szFullPath);
cout<<totalNum<<" "<<pBuffer<<endl;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值