C++多字节与宽字节间的转换(wchar_t与char转换)

最近在C++编程中经常遇到需要多字节字符与宽字节字符相互转换的问题,一直自己贴那几句代码。觉得麻烦,于是就自己写了一个类来封装wchar_t与char类型间的转换,

其他的,诸如:CString\ LPWSTR\TCHAR   CHAR\LPSTR之间也是一样用

#include <iostream>   
using namespace std;  
class CUser  
{  
public:  
    CUser();  
    virtual~ CUser();  
    char* WcharToChar(wchar_t* wc);//宽字节转单字节   
     wchar_t* CharToWchar(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*/  
   
CUser::CUser():m_char(NULL), m_wchar(NULL)  
{  
}  
CUser::~CUser()  
{  
    Release();  
}  
char* CUser::WcharToChar(wchar_t* wc)  
{  
    Release();  
    int len= WideCharToMultiByte(CP_ACP,0,wc,wcslen(wc),NULL,0,NULL,NULL);  
    m_char=new char[len+1];  
    WideCharToMultiByte(CP_ACP,0,wc,wcslen(wc),m_char,len,NULL,NULL);  
    m_char[len]='\0';  
    return m_char;  
}  
wchar_t* CUser::CharToWchar(char* c)  
{  
    Release();  
    int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
    m_wchar=new wchar_t[len+1];  
    MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
    m_wchar[len]='\0';  
    return m_wchar;  
}  
void CUser::Release()  
{  
    if(m_char)  
    {  
        delete m_char;  
        m_char=NULL;  
    }  
    if(m_wchar)  
    {  
        delete m_wchar;  
        m_wchar=NULL;  
    }  
}  

//使用的时候非常简单了:

WCHAR* wc=findData.cFileName;  
CUser u;  
char* c=u.WcharToChar(wc);  
cout<<c<<endl;  

CUser u;  
char* pBuffer=u.WcharToChar(szFullPath);  
cout<<totalNum<<"    "<<pBuffer<<endl;  

 

原文:http://www.linuxidc.com/Linux/2012-05/60869.htm

 

如果仅仅是将一个宽字符转化为一般字符,可以直接使用下面的代码,要注意分配空间的释放。一般字符转宽字符类似。

 

    int len= WideCharToMultiByte(CP_ACP,0,wc,wcslen(wc),NULL,0,NULL,NULL);  
    m_char=new char[len+1];  
    WideCharToMultiByte(CP_ACP,0,wc,wcslen(wc),m_char,len,NULL,NULL);  
    m_char[len]='\0';  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值