歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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.linuxidc.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;  
Copyright © Linux教程網 All Rights Reserved