string和wstring的互转

原创 2018年04月17日 15:13:24

方式一:调用Windows API

#include <Windows.h>
//将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] = '\0';             //添加字符串结尾  
    //删除缓冲区并返回值  
    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] = '\0';  
    //删除缓冲区并返回值  
    result.append(buffer);  
    delete[] buffer;  
    return result;  
} 

方式二:采用ATL封装_bstr_t的过渡

#include <comutil.h>  
#pragma comment(lib, "comsuppw.lib")

string ws2s(const wstring& ws)
{
    _bstr_t t = ws.c_str();  
    char* pchar = (char*)t;  
    string result = pchar;  
    return result;  
}

wstring s2ws(const string& s)
{
    _bstr_t t = s.c_str();  
    wchar_t* pwchar = (wchar_t*)t;  
    wstring result = pwchar;  
    return result; 
} 

string 与 wstring 的中文互转(zt)

 (zt)随着VS2003升级到VS2005,很多以前熟悉的输入输出方式以及参数传递方式都不再有效(参看 vs2003 到vs2005代码升级要点http://bianyongtao.spaces.l...
  • code_pipeline
  • code_pipeline
  • 2007-11-02 17:21:00
  • 4181

wstring与string互转

std::string ws2s(const std::wstring& ws) { std::string curLocale = setlocale(LC_ALL, NULL); ...
  • rentao315
  • rentao315
  • 2014-01-19 14:11:31
  • 548

string与wstring互转

std::string -> std::wstring wstring stdcxx_s2ws(string s) { wstring ws; #ifdef _MSC_VER int iL...
  • hckMe
  • hckMe
  • 2015-01-12 10:03:30
  • 316

c++ int转string int转wstring

int转string #include #include using namespace std; int main() { int i=66; ostringstream oss; ...
  • u010370871
  • u010370871
  • 2015-08-25 10:44:33
  • 2003

浅析C++中String到WString的转换

今天心情不好,但是生活还要继续。 那就谈一谈wstring、string以及二者的转换吧!W顾名思义就是Width的缩写,即所谓的“宽”。首先看一下wstring和string分别如何定义的:typ...
  • wangshubo1989
  • wangshubo1989
  • 2015-10-18 00:24:39
  • 6949

C++标准里 string和wstring

在C++标准里定义了两个字符串string和wstring  typedef basic_string string;  typedef basic_string wstring;  ...
  • huangzeyy
  • huangzeyy
  • 2014-11-06 11:13:23
  • 30829

C++ 最简单的string与wstring互相转换

之前在网上找了,都是用调用WinAPI的 MultiByteToWideChar或是ATL的_BSTR过度。代码冗长,而且只适合在Windows平台。 发现其实有个最简单的办法,利用BOOST库,兼顾...
  • xuly_29
  • xuly_29
  • 2015-10-17 08:56:30
  • 2787

string和wstring相互转换方法,标准C++做成,可以在Linux、Windows下运行

string和wstring相互转换方法,这个是对以前的修改,主要修改了输入为空,导致的小bug。/* string 转换为 wstring */ std::wstring c2w(const c...
  • Harry_lyc
  • Harry_lyc
  • 2011-07-22 10:10:50
  • 9816

没有躲过的坑--wstring与string的转换

wstring 是指的宽字节。typedef basic_string string; typedef basic_string wstring; 在实际工程中,我们往往需要把string转换为ws...
  • wangshubo1989
  • wangshubo1989
  • 2015-11-16 22:17:51
  • 33987

常用字符转换 string wstring utf8 unicode ascii

std::wstring StringToWstring(const std::string str) {// string转wstring unsigned len = str.size() * ...
  • lcalqf
  • lcalqf
  • 2016-11-25 10:47:28
  • 978
收藏助手
不良信息举报
您举报文章:string和wstring的互转
举报原因:
原因补充:

(最多只允许输入30个字)