歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++多字節與寬字節間的轉換(wchar_t與char轉換)

C++多字節與寬字節間的轉換(wchar_t與char轉換)

日期:2017/3/1 10:22:29   编辑:Linux編程

最近在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