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

  • 相关阅读:
    第10节--单行函数之数学函数
    第九节--单行函数之日期函数
    【译】什么是游戏开发实体系统框架(终)
    【译】什么是游戏开发实体系统框架(一)
    【译】游戏《实体系统框架》译文——序
    IDEA 快捷键
    Java学习笔记1
    Java面试题
    Java学习笔记——集合
    Java学习笔记——String类常用方法
  • 原文地址:https://www.cnblogs.com/m-zhang-yang/p/12767439.html
Copyright © 2011-2022 走看看