zoukankan      html  css  js  c++  java
  • 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]只能得到“中”的第一个字节。

  • 相关阅读:
    HBase 高性能加入数据
    Please do not register multiple Pages in undefined.js 小程序报错的几种解决方案
    小程序跳转时传多个参数及获取
    vue项目 调用百度地图 BMap is not defined
    vue生命周期小笔记
    解决小程序背景图片在真机上不能查看的问题
    vue项目 菜单侧边栏随着右侧内容盒子的高度实时变化
    vue项目 一行js代码搞定点击图片放大缩小
    微信小程序进行地图导航使用地图功能
    小程序报错Do not have xx handler in current page的解决方法
  • 原文地址:https://www.cnblogs.com/rogge7/p/4601091.html
Copyright © 2011-2022 走看看