|
|
1:使用CString,要包含文件afx.h,比如在Win32 Console Application中Alt+F7选择Use MFC in a Static Liberary,然后再添加#include<afx.h>就可以使用CString了。7 q: e9 I$ w9 F9 y+ m* I1 S
5 ~- S8 q& K( y# O2:WCHAR ch = L’中’;与CHAR ch = ’中’;的区别是第一种使用UNICODE编码,第二种方式一般不经常用到,比如:
( X5 k$ k9 D q; K
" G1 X& Y) ~ [ WCHAR strA [ 2 ] = { L'中' , 0 } ;//打开VC的Options菜单,选中Debug选项卡中的Display unicode strings后,可以看到strA的值。3 K( k j2 Z! S8 E; a
) a! V. E4 p( m/ p/ E, l
WCHAR strB [ 2 ] = { '中' , 0 } ;
* ^0 x: Y k, F2 g* s( {: I" N7 V2 K) s* U
CString strC ;5 R* t% L% v2 L$ A1 \- R5 |# i
9 d) T1 K% J4 E& N strC+ = ( ( char * ) strB ) [ 1 ] ;
0 x8 z0 y7 ^9 y0 r" p
6 K& b" r9 S B6 N strC+ = ( ( char * ) strB ) [ 0 ] ;//strC==”中”
$ x6 p- z, ~. O$ A; b& M0 O* d) o# W& ]
3:CString的AllocSysString ( )成员函数;可以方便的把一个字符串转换成UNICODE形式。记得使用完该UNICODE字符串后要调用::SysFreeString()函数释放字符串。" M" ~8 z$ y; w) z
! _% ]5 x w) }& j- P" C4: CString::AllocSysString ( )或者::SysAllocString得到的字符串并不是普通的UNICODE字符串,它之前的四个字节会存放申请的字符串的长度:$ }) l0 W' e7 I) K
) f% p. [0 w" B! `: t9 r+ c
CString strD = ”asdf”;
4 \; M& u1 Y0 {( a5 H7 x* h$ q1 W% f8 T$ }. @* G
BSTR strD = strC.AllocSysString( ) ;
' ~# o9 F m8 \& [7 B/ ~$ [9 }' E4 u: H& i
long i =* ( ( long * ) strD – 1 ) ; // i == 8;一个UNICDE字符的长度是2字节,所以strD的长度为8个字节。 |$ r9 D# \0 `* P* T3 s
, k5 R, k# u( v. v3 N5 z; j& T+ o
4:UTF-8码转换为一般的字符串:
4 u; ?. z1 ~( G! X; h
0 F5 e$ ]$ Z3 m8 J1 t/ ?7 W#include " Windows.h "
! X( B( ^. o9 V( i9 k
" @9 H" J3 _: z, Z1 Y% [ ! r& l) k1 V0 z6 t
. q. G; @! [: t/ d" u7 Z4 r
int main(void)/ R( ~ r9 o# b2 W. g
" p* f1 D) n7 `2 x W+ ^5 r8 V{
; e4 z5 C3 {* o2 ^ ^& l
4 j$ a; s6 M( @& m& s8 H char str [ 256 ] = {( char )0xE4, ( char ) 0xBD, ( char ) 0xA0, ( char ) 0xE5 ,3 C9 z9 I# _9 B3 p0 F$ V" \/ n
) S5 u5 \$ G9 d: u( W, t, a
( char)0xA5 ,(char)0xBD, (char)0x61, (char)0x62 ,(char)0x63,(char)0} ; //一段UTF-8编码* `4 j3 P5 G2 c/ w6 j( S* E6 C
# Q( ?& _2 }2 u: a- f WCHAR* strA;! c) N, C( X8 `+ i
$ y$ `* ^7 B; b! L
int i= MultiByteToWideChar ( CP_UTF8 , 0 ,(char*) str ,-1 ,NULL,0);
9 _4 A( y0 A& |0 Y8 `0 k5 U: T) A. h' O5 M3 T: ~3 C2 k* f5 ]+ Z
strA = new WCHAR;) J& C9 q6 o$ L2 ~' v1 u3 y
* k* r$ L% v7 q' A. S
MultiByteToWideChar ( CP_UTF8 , 0 ,( char * ) str, -1, strA , i );6 R3 J- ~# }' e$ }( x u+ G
* b4 G' a4 ~0 ?# F# ^3 r" X i= WideCharToMultiByte(CP_ACP,0,strA,-1,NULL,0,NULL,NULL);
4 \! g' X. _# h: |# |9 t) D, `+ D
char *strB=new char;
. i' z; _7 p) v3 A0 Q* W1 e. m1 O; u; [, w. [! ~
WideCharToMultiByte (CP_ACP,0,strA,-1,strB,i,NULL,NULL);/ v. d0 ~8 N/ w* ^# p8 `
9 A3 d8 K' z! k* C//strB即为所求
H, Q" W; K5 }. K
$ R8 I T5 N$ }( a delete []strA;
! r* ?- j, A3 {% t* \4 _6 j# f: [7 Z1 | O' q8 h9 c
delete []strB;6 F: a3 S* Q, w y6 T. D: g& m
( n/ P* k- v* p* n/ ~ return 0;9 A+ S# e5 a& A) p) O' B& {1 Y* }7 ]
$ M9 A: x( E) Y9 Q5 U$ I
}
+ u5 w7 {% D3 u& C+ K- R2 g3 t% h2 a1 w* [' y6 Y
5:在转换方面_bstr_t是最最灵活的,他提供了UNICODE到一般字符串的直接转换:
" a) R+ O( Q7 [7 y$ o! D" O) ~+ t8 O- {9 ^5 [' D! j
#include <comdef.h> L. q ]1 [+ k
4 n, `4 c' v% l
_bstr_t strA;
. h# ~$ W3 p: S0 l. t' a
! w# j) }3 t& s9 D char *strB="中国人";
, L+ q, E0 p+ e: R) [7 n) A- Y7 l' Q+ m: @
strA=strB;: v; F' B {, m* B& s$ N
5 e! P& S7 @4 ]: l8 ? ~! T: i WCHAR *strC=strA;2 P4 ~0 h( K- W' e( x
' g: |0 v! a" o& q, W0 W long i =* ( ( long * ) strC - 1 ) ;// i 亦是字符串的字节长度
& Q9 z4 R @3 C) `6 `* @3 ^: p2 w! l' J
char *strD=strA;% }) M1 Q( @- Y( l/ `
* f: a |* V7 Y2 U. P m
return 0; |
|