|
//AnsiString、String、WideString、UnicodeString本身就是一個(gè)指針類型 procedure TForm9.BitBtn1Click(Sender: TObject); var s1:System.AnsiString; s2:System.String; s3:System.WideString; s4:System.UnicodeString; s5:String[10]; begin Dialogs.ShowmessageFmt('%d,%d,%d,%d,%d',[SizeOf(s1),SizeOf(s2),SizeOf(s3),SizeOf(s4),SizeOf(s5)]); {4,4,4,4,11} end; //String[n]類型,首字節(jié)String[0]記錄了字符串的長度 procedure TForm9.BitBtn1Click(Sender: TObject); var s5:String[20]; begin s5:='China(中國)'; //將@s5[0]指針類型強(qiáng)制轉(zhuǎn)換為PByte指針類型,然后再將其值取出; ShowmessageFmt('%d',[PByte(@s5[0])^]); {11} end; //AnsiString采用的是MBCS多字節(jié)字符集,String、WideString、UnicodeString采用的是Unicode字符集; //MBCS字符集:英文字符用一個(gè)字節(jié)表示,漢字用兩個(gè)字節(jié)表示;像GB2312、Big5、GBK(GB2312的擴(kuò)展,向上兼容)等都是屬于MBCS字符集的范疇;在Unicode字符集出臺(tái)之前,像Big5與GBK之間是相互獨(dú)立的,并不兼容; //Unicode字符集:使用雙字節(jié)表示一個(gè)字符;容納了世界上所有文字和符號(hào),并進(jìn)行了統(tǒng)一編碼; procedure TForm9.BitBtn1Click(Sender: TObject); var s1:System.AnsiString; s2:System.String; s3:System.WideString; s4:System.UnicodeString; begin s1:='abc(中國)'; ShowmessageFmt('%d,%d',[Length(s1),SizeOf(s1[1])]); {9,1} s2:='abc(中國)'; ShowmessageFmt('%d,%d',[Length(s2),SizeOf(s2[1])]); {7,2} s3:='abc(中國)'; ShowmessageFmt('%d,%d',[Length(s3),SizeOf(s3[1])]); {7,2} s4:='abc(中國)'; ShowmessageFmt('%d,%d',[Length(s4),SizeOf(s4[1])]); {7,2} end; procedure TForm9.BitBtn1Click(Sender: TObject); var s1:System.AnsiString; s2:System.String; s3:System.WideString; s4:System.UnicodeString; begin //在GB2312編碼表中,"漢"的編碼為BABA,"字"的編碼為D7D6; SetLength(s1,4); //習(xí)慣上從左向右進(jìn)行編碼,但計(jì)算機(jī)是從右向左進(jìn)行讀取的,所以順序要倒一下; System.PWord(@s1[1])^:=$BABA; System.PWord(@s1[3])^:=$D6D7; {D7與D6順序要倒一下} Showmessage(s1); {漢字} //在Unicode編碼表,"漢"的編碼為6C49,"字"的編碼為5B57; SetLength(s2,2); {漢字} System.PWord(@s2[1])^:=$6C49; System.PWord(@s2[2])^:=$5B57; Showmessage(s2); {漢字} SetLength(s3,2); System.PInteger(@s3[1])^:=$5B576C49; Showmessage(s3); {漢字} SetLength(s4,2); System.PInteger(@s4[1])^:=($5B57 shl 16) or $6C49; Showmessage(s4); {漢字} end;
|
|
|