• 关于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

  • 相关阅读:
    终端-进入云服务器
    Git-简单的利用SourceTree提交代码
    iOS-多线程的底层实现
    JS-表单提交检查表单字数方法
    JS-实时修改在textarea里面的span(实际输入的文字)
    JS-textarea限制输入字数
    JS-Zepto.js中文链接
    搭建简单的单个Mybatis框架
    创建一个简单的SSM框架(2)
    创建一个简单的SSM框架(1)
  • 原文地址:https://www.cnblogs.com/m-zhang-yang/p/12767439.html
Copyright © 2020-2023  润新知