zoukankan      html  css  js  c++  java
  • string转wstring

    #include <string>
    std::string ws2s(const std::wstring& ws)
    {
        std::string curLocale = setlocale(LC_ALL, NULL);        // curLocale = "C";
        setlocale(LC_ALL, "chs");
        const wchar_t* _Source = ws.c_str();
        size_t _Dsize = 2 * ws.size() + 1;
        char *_Dest = new char[_Dsize];
        memset(_Dest,0,_Dsize);
        wcstombs(_Dest,_Source,_Dsize);
        std::string result = _Dest;
        delete []_Dest;
        setlocale(LC_ALL, curLocale.c_str());
        return result;
    }
    
    std::wstring s2ws(const std::string& s)
    {
        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);
        mbstowcs(_Dest,_Source,_Dsize);
        std::wstring result = _Dest;
        delete []_Dest;
        setlocale(LC_ALL, "C");
        return result;
    }

      

    Unicode下wstring(wchar_t*)和string(char *)转换

    #include<string>
    using namespace std;
    
    //将string转换成wstring
    wstring string2wstring(string str)
    {
    	wstring result;
    	//获取缓冲区大小,并申请空间,缓冲区大小按字符计算
    	int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0);
    	TCHAR* buffer = new TCHAR[len + 1];
    	//多字节编码转换成宽字节编码
    	MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, len);
    	buffer[len] = '';				//添加字符串结尾
    	//删除缓冲区并返回值
    	result.append(buffer);
    	delete[] buffer;
    	return result;
    }
    
    //将wstring转换成string
    string wstring2string(wstring wstr)
    {
    	string result;
    	//获取缓冲区大小,并申请空间,缓冲区大小事按字节计算的
    	int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);
    	char* buffer = new char[len + 1];
    	//宽字节编码转换成多字节编码
    	WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);
    	buffer[len] = '';
    	//删除缓冲区并返回值
    	result.append(buffer);
    	delete[] buffer;
    	return result;
    }
    

      

  • 相关阅读:
    项目中遇到的IE8浏览器访问页面过慢问题
    linux下安装Oracle时交换空间不足的解决方法
    linux下为目录和文件设置权限
    启动TDS LDAP 服务器遇到的问题总结
    sql1032n sql6048n db2start启动不了 db2修改hostname
    IBM CE 错误集之(FNRCS0005E)
    Oracle同一个用户下启动多个数据库实例
    几种任务调度的 Java 实现方法与比较
    EXP-00056: ORACLE error 12154 encountered
    oracle删除数据库中的所有表
  • 原文地址:https://www.cnblogs.com/fuyanwen/p/3245854.html
Copyright © 2011-2022 走看看