DelphiXE下的字符串变化
2015-06-25 22:19
447 查看
字符串类型用于描述一个单独的书面的文字和符号。
一、字符类型
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。四种字符串的简要信息如下:
其中,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]只能得到“中”的第一个字节。
一、字符类型
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码字符 |
注意: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]只能得到“中”的第一个字节。
相关文章推荐
- 转 Delphi中使用FastMM4结合View CPU避免内存泄漏
- 使用Delphi Xe8 开发微信功能 -- (二)微信支付商户平台之查询订单详情
- Delphi Firemonkey在主线程 异步调用函数(延迟调用)
- Delphi中Chrome Chromium、Cef3学习笔记(三)
- delphi 调用webservice产生 Microsoft MSXML is not installed的解决办法。
- 使用Delphi Xe8 开发微信功能 -- (一)微信支付商户平台之对账单下载
- 让delphi程序不受WINDOWS日期格式的影响
- Delphi中Chrome Chromium、Cef3学习笔记(二)
- Delphi中Chrome Chromium、Cef3学习笔记(一)
- delphi日期格式化免操作系统依赖单元
- Delphi 安卓开发 小米MIUI系统备忘
- delphi 控件 combobox常识
- delphi Text,combox 输入框的统一验证
- Delphi调用java开发的WebService,传入参数出错
- 转:delphi异常捕获try except语句 和 try finally语句用法
- 推荐几个delphi的CSDN博客
- 编写delphi类
- Delphi正则表达式处理集合
- delphi中xmldocument对象使用方法
- Delphi XE的firemonkey获取当前文件所在路径的方法