Delphi字符串类型浅析(DOC可编).docVIP

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Delphi字符串类型浅析(DOC可编).doc

Delphi 字符串类型浅析 收藏 参考资料《Delphi 5开发人员指南》“第2章Object Pascal语言” 《PASCAL精要》“第7章 字符串操作” “Delphi中String类型和Char类型的比较” “Object Pascal中String类型的内幕探讨” 基本知识字符串类型 ?AnsiString这是Pascal缺省的字符串类型,它由AnsiChar字符组成,其长度没有限制,同时与null结束的字符串相兼容。 ?ShortString保留该类型是为了向后兼容Delphi1.0,它的长度限制在255个字符内。 ?WideString功能上类似于AnsiString,但它是由WideChar字符(UniCode字符集)组成的。引入这种类型,主要是为了支持OLE编程。 ?PChar指向null结束的Char字符串的指针,类似于C的char*或lpstr类型。 ?PAnsiChar指向null结束的AnsiChar字符串的指针。 ?PWideChar指向null结束的WideChar字符串的指针。 字符类型 ?AnsiChar,以 8 位表示 (共有 256 个不同的符号)。 ?WideChar,以 16 位表示 (共有 64,000 个不同的符号)。 String类型 注意:以下是指Delphi2007以前的编译器(包括Delphi2007)。 1、缺省情况下,如果用如下的代码来定义字符串,编译器认为是AnsiString字符串: var S:string;//编译器认为S的类型是AnsiString 2、编译开关$H “$H编译开关”的值用来决定当变量声明为string时,它是被当作AnsiString类型还是被当作ShortString类型。当“$H”值为负时,string变量是ShortString类型;当“$H”值为正时(缺省情况),string变量是AnsiString类型。下面的代码演示了这种情况: var {$H-} S1:string;//S1是ShortString类型 {$H+} S2:string;//S2是AnsiString类型 使用$H规则的一个例外是,如果在定义时特地指定了长度(最大在255个字符内),那么总是ShortString。 var S:string[63];//63个字符的ShortString字符串 Char类型 1、Delphi2007以前的编译器(包括Delphi2007)缺省情况下认为Char是AnsiChar类型,PChar是PAnsiChar类型。 2、Delphi2009的编译器缺省情况下认为Char是WideChar类型,PChar是PWideChar类型。 请注意,没有任何方法可变更这个新的编译器预设设定。对于字符串类型而言,会以固定的硬式编码方式将 Char 类型对应到特定的数据类型。 AnsiString类型 1、AnsiString是生存期自管理类型。 2、AnsiString字符串总是以null字符结束的,这使得AnsiString字符串能与Win32API中的字符串兼容。 3、AnsiString类型是一个指向在堆栈中的字符串结构的指针。 可以使用Sizeof去读取AnsiString类型的大小,不论字符串的实际长度是多少,Sizeof(AString)永远是4。 4、AnsiString字符串在内存中分配的情况 注意: 在Delphi2.0以后版本中,不能再通过字符串的第0个元素来设置或得到字符串的长度,只能通过Length()函数来得到字符串的长度,通过SetLength()过程来设置字符串的长度。 Borland并不保证String的内存结构在以后的Delphi版本中会保持不变。 (1)、Delphi5内存结构如下: (2)、Delphi7内存结构如下: AnsiString指向一块内存起始偏移8字节处,前面8字节依次为引用计数和长度计数两个整数。 (3)、Delphi2009内存结构如下: -12 -10 -8 -4 最后一位 字码页 字符大小 引用计数 字串长度 字串内容 0 除了字串长度及引用计数外,新的AnsiString格式包括字符大小及字码页。字符大小可用来区分 AnsiString 及UnicodeString,而字码页特别适用于 AnsiString 类型 (可用于 Delphi 2009),UnicodeString 类型的字码页则固定为 1200,字码包括UTF-8、GBK等,例如“$03A8就是936,查MSDN 936 - gb2312”。 5、AnsiString字符串的引用计数机制。 (1)、AnsiString字符串基于引用计数机制,通过引用计

文档评论(0)

rewfdgd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档