CString是一种很特殊的C++对象,它里面包含了三个值:一个指向某个数据缓冲区的指针、一个是该缓冲中有效的字符记数(它是不可存取的,是位于CString地址之下的一个隐藏区域)以及一个缓冲区长度。有效字符数的大小可以是从0到该缓冲最大长度值减1之间的任何数(因为字符串结尾有一个NULL字符)。字符记数和缓冲区长度被巧妙隐藏。9 L( V B9 g* C C @
1.CString与float的转变! _. R7 {3 I X% w+ O- x1 \0 v
1)CString转变为float
# p4 t- P" p! B- n6 J3 C# f. L CStringstrContent;7 G' ]( @; t; a
floatfNum;
) u& D$ Q0 `) P6 C fNum=atof(strContent);4 ?% B0 i, w( \- e* G
2)float转变为CString
) g. V- G+ r$ H3 R CStringstrContent;
& T$ [) @2 q% ^, I* c$ F; V floatfNum;
! W! T6 D1 H' f9 r* m strContent.format(“"%f“",fNum);) }9 i+ N7 ]8 X% R
2.CString与int的转变
5 j7 A+ }: B! O8 t 1)CString转变为int
" b G' _; v& a7 S6 ] CStringstrContent;6 H1 G7 ]; R7 }+ n! S
intnNum;* v5 ?4 P( v/ Z. `/ I, w$ _% o
nNum=atoi(strContent);
. h4 b5 `! m O" K. U% g 2)int转变为CSting
& o( ]) R% F2 E; A, h5 Z CStringstrContent;# t0 V2 u2 {0 j) I$ ]$ j
intnNum;" P, x# @4 ~! j
strContent.format(“"%d“",nNum); L- D/ Y2 q, @+ b* t- `7 n
3.CString与char*的转变
1 |0 ^6 K/ y" n0 ^1 S2 b$ m 1)CString转变为char*! s4 ^1 z+ W# N0 {
方法一,使用强制转换。例如:! _7 \- j! ^# I. w2 b1 R$ D/ U* r
CStringstrString;
9 P* u6 Z2 m! c7 L LPTSTRlpsz=(LPTSTR)(LPCTSTR)strString;( ^' A( O! B3 t, L9 k) m
方法二,使用strcpy。例如:8 q2 W7 V$ B6 {" k1 f V6 F; ~
CStringstrString;
) O2 q% Z5 Z( ~% ` LPTSTRlpsz=newTCHAR[strString.GetLength()+1];% h1 \' \" q' Y" M2 `( O
_tcscpy(lpsz,strString);7 J+ n/ G( t: t) K" C4 }% E6 ^ l
需要说明的是,strcpy(或可移值的_tcscpy)的第二个参数是constwchar_t*(Unicode)或constchar*(ANSI),系统编译器将会自动对其进行转换。
# z. n8 F% x5 L+ T4 E1 h 方法三,使用CString::GetBuffer。
6 s+ h0 y! A. s- O i5 l7 m6 D$ x CStringstrContent;
- B4 z( b, x" x/ B2 y* m char*pcContent;
, t: G( _# y# q( }6 b pcContent=strContent.GetBuffer(strContent.GetLength());# I7 i2 z& o3 M+ v3 w4 K( D
strContent.ReleaseBuffer();
9 k2 E3 Z$ z" u) M) s2 {* c3 G8 V$ } 如果你需要修改CString中的内容,它有一个特殊的方法可以使用,那就是GetBuffer,它的作用是返回一个可写的缓冲指针。
" {9 u3 o" O* r, `! R 在GetBuffer和ReleaseBuffer之间这个范围,一定不能使用你要操作的这个缓冲的CString对象的任何方法。# ~1 P0 R* p8 M0 Y2 `
因为ReleaseBuffer被调用之前,该CString对象的完整性得不到保障。8 Y0 S1 {8 c9 `& P8 s3 G
2)char*转变为CString |