久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2156|回復: 0
打印 上一主題 下一主題
收起左側(cè)

string和wstring相互轉(zhuǎn)換

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:127229 發(fā)表于 2016-6-19 16:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 51hei不 于 2016-6-19 16:57 編輯

第一種方法:調(diào)用WideCharToMultiByte()和MultiByteToWideChar(),代碼如下(關于詳細的解釋,可以參考《windows核心編程》):
  1. #include <string>
  2. #include <windows.h>
  3. using namespace std;
  4. //Converting a WChar string to a Ansi string
  5. std::string WChar2Ansi(LPCWSTR pwszSrc)
  6. {
  7. int nLen = WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, NULL, 0, NULL, NULL);
  8. if (nLen<= 0) return std::string("");
  9. char* pszDst = new char[nLen];
  10. if (NULL == pszDst) return std::string("");
  11. WideCharToMultiByte(CP_ACP, 0, pwszSrc, -1, pszDst, nLen, NULL, NULL);
  12. pszDst[nLen -1] = 0;
  13. std::string strTemp(pszDst);
  14. delete [] pszDst;
  15. return strTemp;
  16. }
  17. string ws2s(wstring& inputws){ return WChar2Ansi(inputws.c_str()); }
  18. //Converting a Ansi string to WChar string
  19. std::wstring Ansi2WChar(LPCSTR pszSrc, int nLen)
  20. {
  21. int nSize = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)pszSrc, nLen, 0, 0);
  22. if(nSize <= 0) return NULL;
  23. WCHAR *pwszDst = new WCHAR[nSize+1];
  24. if( NULL == pwszDst) return NULL;
  25. MultiByteToWideChar(CP_ACP, 0,(LPCSTR)pszSrc, nLen, pwszDst, nSize);
  26. pwszDst[nSize] = 0;
  27. if( pwszDst[0] == 0xFEFF) // skip Oxfeff
  28. for(int i = 0; i < nSize; i ++)
  29. pwszDst[i] = pwszDst[i+1];
  30. wstring wcharString(pwszDst);
  31. delete pwszDst;
  32. return wcharString;
  33. }
  34. std::wstring s2ws(const string& s){ return Ansi2WChar(s.c_str(),s.size());}
復制代碼



第二種方法:采用ATL封裝_bstr_t的過渡:(注,_bstr_是Microsoft Specific的,所以下面代碼可以在VS2005通過,無移植性);
  1. #include <string>
  2. #include <comutil.h>
  3. using namespace std;
  4. #pragma comment(lib, "comsuppw.lib")
  5. string ws2s(const wstring& ws);
  6. wstring s2ws(const string& s);
  7. string ws2s(const wstring& ws)
  8. {
  9. _bstr_t t = ws.c_str();
  10. char* pchar = (char*)t;
  11. string result = pchar;
  12. return result;
  13. }
  14. wstring s2ws(const string& s)
  15. {
  16. _bstr_t t = s.c_str();
  17. wchar_t* pwchar = (wchar_t*)t;
  18. wstring result = pwchar;
  19. return result;
  20. }
復制代碼



第三種方法:使用CRT庫的mbstowcs()函數(shù)和wcstombs()函數(shù),平臺無關,需設定locale。
  1. #include <string>
  2. #include <locale.h>
  3. using namespace std;
  4. string ws2s(const wstring& ws)
  5. {
  6. string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
  7. setlocale(LC_ALL, "chs");
  8. const wchar_t* _Source = ws.c_str();
  9. size_t _Dsize = 2 * ws.size() + 1;
  10. char *_Dest = new char[_Dsize];
  11. memset(_Dest,0,_Dsize);
  12. wcstombs(_Dest,_Source,_Dsize);
  13. string result = _Dest;
  14. delete []_Dest;
  15. setlocale(LC_ALL, curLocale.c_str());
  16. return result;
  17. }
  18. std::wstring s2ws(const std::string& s)
  19. {
  20.       std::string curLocale = setlocale(LC_ALL, NULL); // curLocale = "C";
  21.       setlocale(LC_ALL, "chs");
  22.       const char* _Source = s.c_str();
  23.       size_t _Dsize = s.size() + 1;
  24.       wchar_t *_Dest = new wchar_t[_Dsize];
  25.       wmemset(_Dest, 0, _Dsize);
  26.       mbstowcs(_Dest,_Source,_Dsize);
  27.       std::wstring result = _Dest;
  28.       delete []_Dest;
  29.       setlocale(LC_ALL, curLocale.c_str());
  30.       return result;
  31. }
復制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表
主站蜘蛛池模板: av网站观看 | 国产精品久久久爽爽爽麻豆色哟哟 | 青青草华人在线视频 | 欧美成年网站 | 日韩影院在线 | 国产91丝袜在线播放 | 成年人网站在线观看视频 | 深夜福利影院 | 国产午夜精品一区二区三区四区 | 9久久婷婷国产综合精品性色 | 91资源在线 | 一区二区av | 久久久女女女女999久久 | 日韩一区二区三区在线视频 | av网站免费观看 | 午夜看电影在线观看 | 精品免费国产一区二区三区四区 | 国产97在线 | 日韩 | 欧美性猛交一区二区三区精品 | 天天色影视综合 | 国产精品免费在线 | 九色视频网站 | 国产成人免费一区二区60岁 | 日韩精品在线视频免费观看 | 亚洲成人自拍 | 日韩国产一区 | 人人天天操 | 日韩视频1 | 免费看一级毛片 | 亚洲一区二区av | 免费黄色在线观看 | 午夜免费在线 | 国产成人小视频 | 中日韩av | 黄色欧美在线 | 国产精品久久亚洲7777 | 日本黄色片免费在线观看 | 99re国产精品 | 成人免费在线小视频 | 在线视频一区二区三区 | 日韩电影免费在线观看中文字幕 |