[转]BSTR、char*和CString short转换
1
BSTR、char*和CString short转换
2![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
(1) char*转换成CString
4![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
若将char*转换成CString,除了直接赋值外,还可使用CString::Format进行。例如:
6![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
char chArray[] = "This is a test";
8
char * p = "This is a test";
9![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
或
11![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
LPSTR p = "This is a test";
13![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
或在已定义Unicode应的用程序中
15![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
TCHAR * p = _T("This is a test");
17![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
或
19![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
LPTSTR p = _T("This is a test");
21
CString theString = chArray;
22
theString.Format(_T("%s"), chArray);
23
theString = p;
24![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
(2) CString转换成char*
26![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
27
若将CString类转换成char*(LPSTR)类型,常常使用下列三种方法:
28![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29
方法一,使用强制转换。例如:
30![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
31
CString theString( "This is a test" );
32
LPTSTR lpsz =(LPTSTR)(LPCTSTR)theString;
33![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
34
方法二,使用strcpy。例如:
35![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
36
CString theString( "This is a test" );
37
LPTSTR lpsz = new TCHAR[theString.GetLength()+1];
38
_tcscpy(lpsz, theString);
39![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
40
需要说明的是,strcpy(或可移值Unicode/MBCS的_tcscpy)的第二个参数是 const wchar_t* (Unicode)或const char* (ANSI),系统编译器将会自动对其进行转换。
41![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
42
方法三,使用CString::GetBuffer。例如:
43![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
CString s(_T("This is a test "));
45
LPTSTR p = s.GetBuffer();
46
// 在这里添加使用p的代码
47
if(p != NULL) *p = _T('\0');
48
s.ReleaseBuffer();
49
// 使用完后及时释放,以便能使用其它的CString成员函数
50![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
51
(3) BSTR转换成char*
52![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
53
方法一,使用ConvertBSTRToString。例如:
54![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
55
#include
56
#pragma comment(lib, "comsupp.lib")
57
int _tmain(int argc, _TCHAR* argv[]){
58
BSTR bstrText = ::SysAllocString(L"Test");
59
char* lpszText2 = _com_util::ConvertBSTRToString(bstrText);
60
SysFreeString(bstrText); // 用完释放
61
delete[] lpszText2;
62
return 0;
63
}
64![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
65
方法二,使用_bstr_t的赋值运算符重载。例如:
66![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
67
_bstr_t b = bstrText;
68
char* lpszText2 = b;
69![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
70
(4) char*转换成BSTR
71![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
72
方法一,使用SysAllocString等API函数。例如:
73![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
74
BSTR bstrText = ::SysAllocString(L"Test");
75
BSTR bstrText = ::SysAllocStringLen(L"Test",4);
76
BSTR bstrText = ::SysAllocStringByteLen("Test",4);
77![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
78
方法二,使用COleVariant或_variant_t。例如:
79![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
80
//COleVariant strVar("This is a test");
81
_variant_t strVar("This is a test");
82
BSTR bstrText = strVar.bstrVal;
83![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
84
方法三,使用_bstr_t,这是一种最简单的方法。例如:
85![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
86
BSTR bstrText = _bstr_t("This is a test");
87![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
88
方法四,使用CComBSTR。例如:
89![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
90
BSTR bstrText = CComBSTR("This is a test");
91![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
92
或
93![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
94
CComBSTR bstr("This is a test");
95
BSTR bstrText = bstr.m_str;
96![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
97
方法五,使用ConvertStringToBSTR。例如:
98![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
99
char* lpszText = "Test";
100
BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);
101![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
102
(5) CString转换成BSTR
103![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
104
通常是通过使用CStringT::AllocSysString来实现。例如:
105![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
106
CString str("This is a test");
107
BSTR bstrText = str.AllocSysString();
108
…
109
SysFreeString(bstrText); // 用完释放
110![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
111
(6) BSTR转换成CString
112![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
113
一般可按下列方法进行:
114![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
115
BSTR bstrText = ::SysAllocString(L"Test");
116
CStringA str;
117
str.Empty();
118
str = bstrText;
119![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
120
或
121![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
122
CStringA str(bstrText);
123![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
124
(7) ANSI、Unicode和宽字符之间的转换
125![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
126
方法一,使用MultiByteToWideChar将ANSI字符转换成Unicode字符,使用WideCharToMultiByte将Unicode字符转换成ANSI字符。
127![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
128
方法二,使用“_T”将ANSI转换成“一般”类型字符串,使用“L”将ANSI转换成Unicode,而在托管C++环境中还可使用S将ANSI字符串转换成String*对象。例如:
129![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
130
TCHAR tstr[] = _T("this is a test");
131
wchar_t wszStr[] = L"This is a test";
132
String* str = S”This is a test”;
133![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
134
方法三,使用ATL 7.0的转换宏和类。ATL7.0在原有3.0基础上完善和增加了许多字符串转换宏以及提供相应的类,它具有如图3所示的统一形式:
135![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
136
其中,第一个C表示“类”,以便于ATL 3.0宏相区别,第二个C表示常量,2表示“to”,EX表示要开辟一定大小的缓冲。SourceType和DestinationType可以是A、 T、W和OLE,其含义分别是ANSI、Unicode、“一般”类型和OLE字符串。例如,CA2CT就是将ANSI转换成一般类型的字符串常量。下面是一些示例代码:
137![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
138
LPTSTR tstr= CA2TEX<16>("this is a test");
139
LPCTSTR tcstr= CA2CT("this is a test");
140
wchar_t wszStr[] = L"This is a test";
141
char* chstr = CW2A(wszStr);
142![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
143
char 转换成short
144![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
145
int atoi(char *nptr) 将字符串nptr转换成整型数, 并返回这个数,错误返回0
146
147
char *num = "123";
148
unsigned short a;
149
150
151
a = (unsigned short) atoi(num) ;
152
153
就是这样了
154
155
156
157
158
类似的函数还有:
159
160
long atol(char *nptr) 将字符串nptr转换成长整型数,并返回这个数,错误返回0
161
162
double atof(char *nptr) 将字符串nptr转换成双精度数,并返回这个数,错误返回0
163![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
2
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
3
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
4
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
5
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
6
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
7
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
8
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
9
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
10
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
11
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
12
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
14
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
15
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
16
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
17
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
18
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
19
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
20
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
21
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
22
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
23
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
24
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
25
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
26
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
27
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
28
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
29
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
30
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
31
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
32
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
33
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
34
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
35
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
36
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
37
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
38
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
39
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
40
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
41
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
42
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
43
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
44
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
45
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
46
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
47
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
48
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
49
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
50
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
51
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
52
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
53
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
54
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
55
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
56
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
57
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
58
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
59
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
60
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
61
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
62
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
63
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
64
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
65
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
66
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
67
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
68
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
69
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
70
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
71
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
72
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
73
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
74
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
75
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
76
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
77
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
78
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
79
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
80
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
81
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
82
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
83
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
84
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
85
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
86
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
87
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
88
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
89
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
90
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
91
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
92
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
93
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
94
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
95
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
96
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
97
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
98
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
99
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
100
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
101
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
102
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
103
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
104
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
105
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
106
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
107
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
108
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
109
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
110
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
111
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
112
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
113
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
114
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
115
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
116
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
117
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
118
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
119
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
120
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
121
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
122
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
123
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
124
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
125
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
126
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
127
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
128
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
129
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
130
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
131
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
132
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
133
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
134
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
135
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
136
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
137
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
138
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
139
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
140
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
141
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
142
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
143
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
144
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
145
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
146
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
147
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
148
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
149
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
150
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
151
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
152
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
153
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
154
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
155
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
156
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
157
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
158
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
159
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
160
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
161
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
162
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
163
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)