DelphiXE下的字符串变化
字符串类型⽤于描述⼀个单独的书⾯的⽂字和符号。
⼀、字符类型
Delphi⽀持AnsiChar和WideChar两种基本的字符类型。AnsiChar类型变量使⽤单字节来表⽰⼀个字符,WideChar使⽤两个字节来表⽰⼀个字符。WideChar和AnsiChar类型的变量之间不能相互赋值,例:
Var
wch: WideChar;
ach: AnsiChar;
begin
ach := '国'; //错误。ach占⽤⼀个字节,⽽汉字占⽤两个字节。但编译器不会提⽰。
ach := wch; //错误。编译器会⾃动提⽰类型不匹配。
end;
Delphi中最常⽤的字符类型是Char类型。它是上⾯两种字符类型其中⼀种的别名。DelphiXE中,Char默认为WideChar,但在之前的版本如Delph7中,Char类型代表AnsiChar。所以在使⽤时要特别注意。
⼆、字符串类型
字符串表⽰由字符组成的序列。Delphi中常⽤的字符串类型主要有四种:ShortString、AnsiString、WideString、UnicodeString。四种字符串的简要信息如下:
类型最⼤长度所需内存⽤途
ShortString 255 byte 2-256 byte 容纳AnsiChar
AnsiString 2GB 4-2GB 容纳AnsiChar
WideString 2GB 4-2GB容纳WideChar
UnicodeString 2GB 4-2GB 容纳Unicode码字符
其中,UniCodeString和WideString基本⽆区别。Delphi在编程中通常讲字符串声明为String类型,此类型与UnicodeString类型完全等价。在较早的版本中String等价于AnsiString类型。
注意:DelphiXE中使⽤UniCodeString下标引⽤得到的字符的值,⽽使⽤AnsiString下标引⽤得到的却是字节的值。
1、ShortString
⼜称为短字符串(相对的其他三种类型称为长字符串),其实质上是⼀个编译器内置的字符数组,类似下⾯的代码(但是不等效)
Type
ShortString = Array[0.255] of AnsiChar;
其容纳由256个AnsiChar组成的字符串,但第⼀个字符有特殊⽤途,所以ShortString类型的字符串长度不能超过255byte。
ShortString的第⼀个字节的值等于字符串的实际长度。所以获取ShortString字符串的实际长度有两种:⼀是利⽤标准函数Length();⼆是直
接⽤第⼀个字节的值。例如:
Var
str: ShortString;
str1: Array[0..255] of AnsiChar;
begin
str := 'abcdefg';
str1 := 'abcdefg';
ShowMessage(IntToStr(integer(str[0]))); //显⽰7
ShowMessage(IntToStr(Length(str))); //显⽰7
ShowMessage(IntToStr(SizeOf(str))); //显⽰256
ShowMessage(str[1]); //显⽰a
ShowMessage(str1[0]); //显⽰a
字符串长度和占用内存字节
end;
2、AnsiString
是Delphi最常⽤的类型,此类型的字符串由ASCII扩展字符集组成。很显然,这种类型字符串不能⽤于不同语⾔版本的操作系统,否则会出现⼀堆乱码。
AnsiString实质上是⼀个指针类型,与普通的指针不同,此类型的指针专⽤于指向字符串。利⽤标准函数SizeOf()可知此类型变量在内存中占⽤4个字节。所以AnsiString最⼩值为4byte,⽽⾮0byte,也就是说,⼀个空字符串占⽤4个字节。
由于AnsiString类型的字符串占⽤的空间最⼤可达2GB,为了节约内存,Delphi将AnsiString字符串的本⾝分配在堆中,⽽在栈中留下⼀个指向字符串的指针,这个指针就是AnsiString类型的变量。使⽤字符串索引时要注意,索引应该从1开始,因为0索引的值标识了这个字符串的长度。对AnsiString类型字符串进⾏索引只能得到某个字节,⽽不⼀定是某个字符的值。如:
Var
str: AnsiString;
begin
str := '中国';
ShowMessage(str[1]);//显⽰?
end;
str[1]不表⽰“中”,因为汉字在ASCII扩展字符集中由两个字节组成,所以str[1]只能得到“中”的第⼀个字节。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。