在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;
} |