zoukankan      html  css  js  c++  java
  • Delphi 的字符及字符串 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;
  • 相关阅读:
    Python中引用自定义类的方法
    使用js判断a是不是NaN 类型
    实现小数保留并四舍五入
    C# 生成全球唯一标识符GUID
    VS2008 激活
    Android 获取当前IP地址
    Android 双屏异显的实现
    用友系统的本币和原币
    .net core Json字符串的序列化和反序列化通用类源码,Newtonsoft和DataContractJsonSerializer性能对比
    建议收藏备用:.net core使用QRCoder生成普通二维码和带Logo的二维码详细使用教程,源码已更新至开源模板
  • 原文地址:https://www.cnblogs.com/yangxuming/p/7273600.html
Copyright © 2011-2022 走看看