字符串类型用于描述一个单独的书面的文字和符号。

一、字符类型

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]只能得到“中”的第一个字节。

DelphiXE下的字符串变化的更多相关文章

  1. Windows内核下操作字符串!

    * Windows内核下操作字符串! */ #include <ntddk.h> #include <ntstrsafe.h> #define BUFFER_SIZE 1024 ...

  2. Linux下对字符串进行MD5加密

    Linux下对字符串进行MD5加密 比如要用MD5在linux下加密字符串“test",可以使用命令:$ echo -n test|md5sum098f6bcd4621d373cade4e8 ...

  3. rsync+inotify 实现资源服务器的同步目录下的文件变化时,备份服务器的同步目录更新,以资源服务器为准,去同步其他客户端

    测试环境: 资源服务器(主服务器):192.168.200.95 备份服务器(客户端):192.168.200.89 同步目录:/etc/test 同步时使用的用户名hadoop密码12345 实验目 ...

  4. java利用WatchService实时监控某个目录下的文件变化并按行解析(注:附源代码)

    首先说下需求:通过ftp上传约定格式的文件到服务器指定目录下,应用程序能实时监控该目录下文件变化,如果上传的文件格式符合要求,将将按照每一行读取解析再写入到数据库,解析完之后再将文件改名. 一. 一开 ...

  5. C#下JSON字符串的反序列化

    C#下JSON字符串的反序列化,一般都是用newtonsoft.json,比较方便..net当然也有提供相应功能,但觉得比较复杂. 所谓反序列化,就是将一个包含JSON内容的字符串,转换回指定对象(不 ...

  6. js:把字符串转为变量使用; js下将字符串当函数去执行的方法

    1 把字符串当变量使用 通过计算 string 得到的值(如果有的话).该方法只接受原始字符串作为参数 demo: var type = "car"; var newStr = & ...

  7. 2019-10-16-WPF-控件-Content-的内容不显示下划线字符串

    title author date CreateTime categories WPF 控件 Content 的内容不显示下划线字符串 lindexi 2019-10-16 09:21:32 +080 ...

  8. Delphi For Android 开发笔记 2 NEXTGEN下的字符串类型

    delphi开发速度迅捷至少有30%(猜的,呵呵)的原因是因为其字符串(string.WideString.PChar.PAnsiChar等)处理能力. 而从delphi XE4开始,在system等 ...

  9. 微服务框架下的思维变化-OSS.Core基础思路

    如今框架两字已经烂大街了,xx公司架构设计随处可见,不过大多看个热闹,这些框架如何来的,细节又是如何思考的,相互之间的隔离依据又是什么...相信很多朋友应该依然存在自己的疑惑,特别是越来越火热的微服务 ...

随机推荐

  1. checkbox实现全选全不选

    1.jQuery实现checkbox全选全不选 <!DOCTYPE html> <head runat="server"> <title>jQu ...

  2. [Android Pro] 小心ReleaseByteArrayElements 中的参数问题

    referen to : http://blog.csdn.net/rainlight/article/details/818964 在Sun的官方文档中,关于该函数的用法如下 The array i ...

  3. webstorm添加vue插件支持

    现在已经有vue.js的插件啦,setting --> plugins 就可以咯 ------------------------------------------------ Mac端Web ...

  4. web前端开发学习:jQuery的原型中的init

    web前端开发学习:jQuery的原型中的init 有大量web前端开发工具及学习资料,可以搜群[ web前端学习部落22群 ]进行下载,遇到学习问题也可以问群内专家以及课程老师哟 jQuery.fn ...

  5. mvn命令备忘

    转换成eclipse项目mvn eclipse:eclipse 跳过testmvn install -Dmaven.test.skip=true mvn clean install -DskipTes ...

  6. 命名空间 - PHP笔记

    转: 概述 命名空间是一种封装事物的方法.在很多地方都可以见到这种抽象概念,比如在操作系统中,目录用来将相关文件分组,对于目录中的文件来说,目录就扮演了命名空间的角色.这个原理应用到程序设计领域就是命 ...

  7. NYOJ题目872开会

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsoAAAKwCAIAAAAOTc6wAAAgAElEQVR4nO3dO3LcSpOG4dkEfS6Edi

  8. ps -C nginx --no-header |wc -l

    [root@ok ok]# ps --help|grep C -A all processes -C by command name -V,V show version L list format c ...

  9. 与你相遇好幸运,CentOS 7 x86_64使用Yum安装PostgreSQL

    访问http://yum.pgrpms.org/reporpms/repoview/letter_p.group.html,下载并安装和当前系统对应的rpm文件. wget https://downl ...

  10. Delphi的枚举类型

    参考:http://blog.csdn.net/kissdeath/article/details/2060573 Delphi程序不仅可以用于数值处理,还更广泛的用于处理非数值的数据.例如:性别.月 ...