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


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

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

  1. #include <iostream>   
  2. using namespace std;  
  3. class CUser  
  4. {  
  5. public:  
  6.     CUser();  
  7.     virtual~ CUser();  
  8.     char* WcharToChar(wchar_t* wc);//宽字节转单字节   
  9.     wchar_t* CharToWchar(char* c); //单字节转宽字节   
  10.     void Release();//释放资源   
  11. private:  
  12.     char* m_char;  
  13.     wchar_t* m_wchar;  
  14. };  
  15. /////////////////////////////////////////////////////////////////////////////////////   
  16. /*字符类型        wchar_t     char 
  17. /*获取字符长度    wcslen()    strlen() 
  18. /*连接两个字符串  wcscat()    strcpy() 
  19. /*复制字符串      wcscpy()    strcpy() 
  20. /*比较两个字符串  wcscmp()    strcmp() 
  21. /*具体参数详见www.bkjia.com*/  
  22. ////////////////////////////////////////////////////////////////////////////////////   
  23. CUser::CUser()  
  24. :m_char(NULL)  
  25. ,m_wchar(NULL)  
  26. {  
  27. }  
  28. CUser::~CUser()  
  29. {  
  30.     Release();  
  31. }  
  32. char* CUser::WcharToChar(wchar_t* wc)  
  33. {  
  34.     Release();  
  35.     int len= WideCharToMultiByte(CP_ACP,0,wc,wcslen(wc),NULL,0,NULL,NULL);  
  36.     m_char=new char[len+1];  
  37.     WideCharToMultiByte(CP_ACP,0,wc,wcslen(wc),m_char,len,NULL,NULL);  
  38.     m_char[len]='\0';  
  39.     return m_char;  
  40. }  
  41. wchar_t* CUser::CharToWchar(char* c)  
  42. {  
  43.     Release();  
  44.     int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);  
  45.     m_wchar=new wchar_t[len+1];  
  46.     MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);  
  47.     m_wchar[len]='\0';  
  48.     return m_wchar;  
  49. }  
  50. void CUser::Release()  
  51. {  
  52.     if(m_char)  
  53.     {  
  54.         delete m_char;  
  55.         m_char=NULL;  
  56.     }  
  57.     if(m_wchar)  
  58.     {  
  59.         delete m_wchar;  
  60.         m_wchar=NULL;  
  61.     }  
  62. }  

使用的时候非常简单了:

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

 

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

相关内容