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

一、字符类型

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. 【python】getopt使用

    来源:http://blog.chinaunix.net/uid-21566578-id-438233.html 注意对比:[python]argparse模块 作者:limodou版权所有limod ...

  2. 【mongo】Can't take a write lock while out of disk space错误

    今天遇到了这个错误,各种无法操作.找了很久的方案,都没用.最终发现,原来是我虚拟机硬盘满了......清除了些没用的东西,就恢复了.

  3. 20145213《Java程序设计》实验三敏捷开发与XP实践

    20145213<Java程序设计>实验三敏捷开发与XP实践 实验要求 1.XP基础 2.XP核心实践 3.相关工具 实验内容 1.敏捷开发与XP 软件工程是把系统的.有序的.可量化的方法 ...

  4. MAC系统下,删除.svn文件

    MAC系统下,.svn文件是隐藏的. 如果项目是非export导出的,那么项目中会有很多的.svn文件. 如果项目的体积非常庞大,我们如何快速的批量删除.svn文件呢?下面是操作方法: 打开终端,cd ...

  5. Meta标签实现阻止移动设备(手机、Pad)的浏览器双击放大网页

    一.背景 在当今这个移动设备发展越来越快,并且技术越来越成熟的时代,移动设备成了企业扩展业务不可或缺的重要领域之一,随之而来的是适应手机的网站层出不穷,在开发过程中,我们往往会遇到一个很尴尬的问题:移 ...

  6. August 29th 2016 Week 36th Monday

    Every has the capital to dream. 每个人都有做梦的本钱. Your vision, our mission. That is an advertisment of UMo ...

  7. iOS 简单提示view

    +(void)showMessage:(NSString *)message{    UIWindow * window = [UIApplication sharedApplication].key ...

  8. NYOJ题目75日期计算

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAr4AAAInCAIAAADxjM2pAAAgAElEQVR4nO3dPVLjStsG4G8T5CyE2A

  9. 利用bak文件恢复数据库问题小结

    对备份的基础理解: --完整备份:完整备份会备份所有数据的区和少量的日志(日志文件用于恢复数据保持数据一致性).由于差异备份需要依据最后一次完整备份,因此完整备份会清楚一些分配位图数据. --差异备份 ...

  10. 设计模式学习之代理模式(Proxy,结构型模式)(11)

    参考地址:http://www.cnblogs.com/zhili/p/ProxyPattern.html 一.引言 在软件开发过程中,有些对象有时候会由于网络或其他的障碍,以至于不能够或者不能直接访 ...