VC++中 wstring和string的互相转换实现

在VC++开发中,经常会用到string和wstring,这就需要二者之间的转换,项目中封装了wstring和string相互转换的2个函数,实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
//将wstring转换成string
std::string ConvertWStringToAnsi(std::wstring wstr)
{
    std::string result;
    int len = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), NULL, 0, NULL, NULL);
    if( len <= 0 )
        return result;
 
    char* buffer = new char[len + 1];
    if(buffer == NULL )
        return result;
 
    WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), wstr.size(), buffer, len, NULL, NULL);
    buffer[len] = ‘\0‘;               //字符串断尾
    result.append(buffer);            //赋值
    delete[] buffer;                  //删除缓冲区
 
    //返回值
    return result;
}
 
 
//将string转换成wstring
std::wstring ConvertAnsiToWString(std::string str)
{
    std::wstring result;
 
    int len = MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), NULL, 0);
    if( len < 0 )
        return result;
 
    wchar_t* buffer = new wchar_t[len + 1];
    if( buffer == NULL )
        return result;
 
    MultiByteToWideChar(CP_ACP, 0, str.c_str(), str.size(), buffer, len);
 
    buffer[len] = ‘\0‘;                    //字符串断尾
    result.append(buffer);                 //赋值
    delete[] buffer;                       //删除缓冲区
 
    //返回值
    return result;
}

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。