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

  • 相关阅读:
    第三章-5、图片左右滑动(动态面板引导页面)
    第三章-8、抽屉导航(动态面板)
    第三章-7、没做
    第三章-6、失败
    第三章-4、瀑布流(动态面板)
    第三章-3、跳转页面&返回页面
    第三章-2、设置条件进行外部连接,跳转页面
    第三章-1、界面原件属性使用(登录界面)
    6、如何将excel表格中的图片批量居中对齐
    React Native
  • 原文地址:https://www.cnblogs.com/m-zhang-yang/p/12767439.html
Copyright © 2011-2022 走看看