//AnsiString、String、WideString、UnicodeString本身就是一个指针类型
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]类型,首字节String[0]记录了字符串的长度
procedure TForm9.BitBtn1Click(Sender: TObject);
var
s5:String[20];
begin
s5:='China(中国)';
//将@s5[0]指针类型强制转换为PByte指针类型,然后再将其值取出;
ShowmessageFmt('%d',[PByte(@s5[0])^]); {11}
end;
//AnsiString采用的是MBCS多字节字符集,String、WideString、UnicodeString采用的是Unicode字符集;
//MBCS字符集:英文字符用一个字节表示,汉字用两个字节表示;像GB2312、Big5、GBK(GB2312的扩展,向上兼容)等都是属于MBCS字符集的范畴;在Unicode字符集出台之前,像Big5与GBK之间是相互独立的,并不兼容;
//Unicode字符集:使用双字节表示一个字符;容纳了世界上所有文字和符号,并进行了统一编码;
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;
//GB2312编码表;Unicode编码表;
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);
//习惯上从左向右进行编码,但计算机是从右向左进行读取的,所以顺序要倒一下;
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;