zoukankan      html  css  js  c++  java
  • 关于string转换为wstring问题

    方法一:需要调用windows的api函数进行转换,在vs2017上试验转换成功

    #ifdef _MSC_VER
    #include <Windows.h>
    #endif // _MSC_VER
    wstring strToStdWString(const string& str)
    {
    	wstring wStr;
    	int len = MultiByteToWideChar(CP_ACP, 0, (LPCSTR)str.c_str(), str.size(), NULL, 0);
    	TCHAR* buffer = new TCHAR[len + 1];
    	MultiByteToWideChar(CP_ACP, 0,(LPCSTR)str.c_str(), str.size(), buffer, len);
    	buffer[len] = '';
    	wStr.append(buffer);
    	return wStr;
    }
    

      

    方法二:该方法经过测试输出错误,并不能完成中文字符的转换

    1 wstring strToStdWString2(const string& str)
    2 {
    3     wstring wstr(str.length(), L' ');
    4     std::copy(str.begin(), str.end(), wstr.begin());
    5     return wstr;
    6 }

    方法三:该调用了locale头文件,与平台无关

    #include <locale.h>
    wstring strToStdWString3(const string& s)
    {
        std::string curLocale = setlocale(LC_ALL, NULL);
        setlocale(LC_ALL, "chs");
        const char* _Source = s.c_str();
        size_t _Dsize = s.size() + 1;
        wchar_t* _Dest = new wchar_t[_Dsize];
        wmemset(_Dest, 0, _Dsize);
        size_t convertedChars = 0;
        mbstowcs_s(&convertedChars, _Dest,_Dsize, _Source, _TRUNCATE);
        std::wstring ws = _Dest;
        delete[] _Dest;
        setlocale(LC_ALL, curLocale.c_str());
        return ws;
    }

    方法4:采用ATL封装_bstr_t的过渡,在vs2017上测试失败,链接错误,并无移植性

    #include <comutil.h>
    #pragma  comment(lib, "comsuppw.lib")
    wstring strToWString4(const string& str)
    {
        _bstr_t t= str.c_str();
        wchar_t* pwchar = (wchar_t*)t;
        wstring ws = pwchar;
        return ws;
    }

    总结:使用方法一和方法三都能实现string向wstring的转换,方法一调用了windows的api,方法三需要设置loacle

  • 相关阅读:
    Don‘t Cry for Me, Argentina
    对象池
    拒绝高姿态
    SOS: How to popup a HwndSource on topmost
    关于设计和设计文档的2个补充
    从今天开始写博客
    Kafka+Storm写入Hbase和HDFS
    工作流调度引擎Oozie
    showModalDialog在父窗体和子窗体之间传值
    慢说HttpContext
  • 原文地址:https://www.cnblogs.com/m-zhang-yang/p/12767439.html
Copyright © 2011-2022 走看看