歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> C++中char*\wchar_t*\string\wstring之間的相互轉換

C++中char*\wchar_t*\string\wstring之間的相互轉換

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

C++中char*\wchar_t*\string\wstring之間的相互轉換:

  1. #ifndef USE_H_
  2. #define USE_H_
  3. #include <iostream>
  4. #include <windows.h>
  5. #include <string>
  6. using namespace std;
  7. class CUser
  8. {
  9. public:
  10. CUser();
  11. virtual~ CUser();
  12. char* WcharToChar(const wchar_t* wp);
  13. char* StringToChar(const string& s);
  14. char* WstringToChar(const wstring& ws);
  15. wchar_t* CharToWchar(const char* c);
  16. wchar_t* WstringToWchar(const wstring& ws);
  17. wchar_t* StringToWchar(const string& s);
  18. wstring StringToWstring(const string& s);
  19. string WstringToString(const wstring& ws);
  20. void Release();
  21. private:
  22. char* m_char;
  23. wchar_t* m_wchar;
  24. };
  25. #endif;

  1. #include "stdafx.h"
  2. #include "use.h"
  3. CUser::CUser()
  4. :m_char(NULL)
  5. ,m_wchar(NULL)
  6. {
  7. }
  8. CUser::~CUser()
  9. {
  10. Release();
  11. }
  12. char* CUser::WcharToChar(const wchar_t* wp)
  13. {
  14. Release();
  15. int len= WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),NULL,0,NULL,NULL);
  16. m_char=new char[len+1];
  17. WideCharToMultiByte(CP_ACP,0,wp,wcslen(wp),m_char,len,NULL,NULL);
  18. m_char[len]='\0';
  19. return m_char;
  20. }
  21. wchar_t* CUser::CharToWchar(const char* c)
  22. {
  23. Release();
  24. int len = MultiByteToWideChar(CP_ACP,0,c,strlen(c),NULL,0);
  25. m_wchar=new wchar_t[len+1];
  26. MultiByteToWideChar(CP_ACP,0,c,strlen(c),m_wchar,len);
  27. m_wchar[len]='\0';
  28. return m_wchar;
  29. }
  30. void CUser::Release()
  31. {
  32. if(m_char)
  33. {
  34. delete m_char;
  35. m_char=NULL;
  36. }
  37. if(m_wchar)
  38. {
  39. delete m_wchar;
  40. m_wchar=NULL;
  41. }
  42. }
  43. char* CUser::StringToChar(const string& s)
  44. {
  45. return const_cast<char*>(s.c_str());
  46. }
  47. char* CUser::WstringToChar(const std::wstring &ws)
  48. {
  49. const wchar_t* wp=ws.c_str();
  50. return WcharToChar(wp);
  51. }
  52. wchar_t* CUser::WstringToWchar(const std::wstring &ws)
  53. {
  54. return const_cast<wchar_t*>(ws.c_str());
  55. }
  56. wchar_t* CUser::StringToWchar(const string& s)
  57. {
  58. const char* p=s.c_str();
  59. return CharToWchar(p);
  60. }
  61. string CUser::WstringToString(const std::wstring &ws)
  62. {
  63. string s;
  64. char* p=WstringToChar(ws);
  65. s.append(p);
  66. return s;
  67. }
  68. wstring CUser::StringToWstring(const std::string &s)
  69. {
  70. wstring ws;
  71. wchar_t* wp=StringToWchar(s);
  72. ws.append(wp);
  73. return ws;
  74. }

如果涉及到CString,可以利用CString::GetBuffer()函數來進行轉換,道理一樣.

Copyright © Linux教程網 All Rights Reserved