• Delphi 的字符及字符串[1] string、AnsiString、WideString、String[n]、ShortString


    //最常用的 string
    var
      str: string;   {定义}
    begin
      str := '万一'; {赋值}
      ShowMessage(IntToStr(Length(str))); {长度是: 4}
    end;
    
    //长字符串 AnsiString; 在当前版本(2007)中的默认状态下, String 就是 AnsiString var str: AnsiString; begin str := '万一'; ShowMessage(IntToStr(Length(str))); {长度是: 4} end;
    //宽字符串 WideString (效率不及 AnsiString) var str: WideString; begin str := '万一'; ShowMessage(IntToStr(Length(str))); {长度是: 2} end;
    //定长字符串 var str1: String[6]; {指定大小不能超过 255} str2: String[100]; begin {少给了也会占那些内存} str1 := '万一'; ShowMessage(str1); {万一} ShowMessage(IntToStr(Length(str1))); {4; 这是字符串的长度} ShowMessage(IntToStr(SizeOf(str1))); {7; 这是占内存大小} {多给了会被截断} str1 := '万一的 Delphi 博客'; ShowMessage(str1); {万一的} 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 := '万一的 Delphi 博客'; ShowMessage(str); {万一的 Delphi 博客} ShowMessage(IntToStr(SizeOf(str))); {256; 这是大小} ShowMessage(IntToStr(Length(str))); {18 ; 这是实际长度} ShowMessage(IntToStr(Ord(str[0]))); {18 ; 这是从首字节中取出的长度} end;
  • 相关阅读:
    Spark源码走读6——Shuffle
    Spark源码走读5——Storage
    使用Gradle构建Android应用的渠道包
    轻松搞定面试中的二叉树题目
    QT中使用微软Speech API实现语音识别
    QT 相关资源(书籍、论坛、博客等。。。)整理...
    使用Cscope阅读大型工程Linux内核的源代码教程
    搭建一个免费的,无限流量的Blog----github Pages和Jekyll入门
    RSA算法原理(二)
    RSA算法原理(一)
  • 原文地址:https://www.cnblogs.com/del/p/1088956.html
Copyright © 2020-2023  润新知