加载中…
个人资料
jepsen1
jepsen1
  • 博客等级:
  • 博客积分:0
  • 博客访问:147,777
  • 关注人气:42
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

Delphi中一些字符串的区别

(2011-01-13 15:33:37)
标签:

杂谈

//最常用的 string
var
 
str: string;   {定义}
begin
  str := 'ff'; {赋值}
  ShowMessage(IntToStr(Length(str))); {长度是: 4}
end;


//长字符串 AnsiString; 在当前版本(2007)中的默认状态下, String 就是 AnsiString
var
  str: AnsiString;
begin
  str := 'ff';
  ShowMessage(IntToStr(Length(str))); {长度是: 4}
end;


//宽字符串 WideString (效率不及 AnsiString)
var
  str: WideString;
begin
  str := 'ff';
  ShowMessage(IntToStr(Length(str))); {长度是: 2}
end;


//定长字符串
var
  str1: String[6]; {指定大小不能超过 255}
  str2: String[100];
begin
  {少给了也会占那些内存}
  str1 := 'ff';
  ShowMessage(str1);                   {ff}
  ShowMessage(IntToStr(Length(str1))); {4; 这是字符串的长度}
  ShowMessage(IntToStr(SizeOf(str1))); {7; 这是占内存大小}

  {多给了会被截断}
  str1 := 'ff的 Delphi 博客';
  ShowMessage(str1);                   {ff的}
  ShowMessage(IntToStr(Length(str1))); {6; 这是实际保存的字符串长度}
  ShowMessage(IntToStr(SizeOf(str1))); {7; 这是占内存大小}

  {问题: 不是声明大小为 6 吗? 怎么 SizeOf 是 7 ? }
  {因为定长字符串会多出一个首字节来记忆字符串的实际长度}

  {举例说明, 如果给 str2 按如下赋值, 那它的首字节(str2[0])肯定储存着字符 'A'}
  str2 := 'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii'; {65个}
  ShowMessage(str2[0]);                {A}
  ShowMessage(IntToStr(Ord(str2[0]))); {65; 这是 'A' 在 ASCII 序列中的序号, 用的就是它}

  {那以后可以用 Ord(str2[0]) 来代替 Length 判断字符串的长度吗? }
  {对定长字符串是可以的; 不但能读取, 还可以像 SetLength 一样设置}
end;


//ShortString; 它相当于 String[255]
var
  str: ShortString;
begin
  str := 'ff的 Delphi 博客';
  ShowMessage(str);                   {ff的 Delphi 博客}
  ShowMessage(IntToStr(SizeOf(str))); {256; 这是大小}
  ShowMessage(IntToStr(Length(str))); {18 ; 这是实际长度}
  ShowMessage(IntToStr(Ord(str[0]))); {18 ; 这是从首字节中取出的长度}
end;

0

阅读 收藏 转载 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有