Delphi 的字符及字符串[1]

Delphi 的字符及字符串[1] - 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 按如下赋值, 那它的首字节 (sstr2[0])肯定储存着字符 'A'}
str2 := 'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii'; {65个}
ShowMessage(str2[0]);        {A}
ShowMessage(IntToStr(Ord(str2[0]))); {65s; 这是 '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;

时间: 2024-11-03 01:38:50

Delphi 的字符及字符串[1]的相关文章

Delphi的字符及字符串[6]

Delphi的字符及字符串[6] - Char(AnsiChar).WideChar与其编码的相互转换 //Char 类型与其编码值的转换: var b: Byte; c: Char; begin b := Ord('A'); {返回: 65} b := Ord(#65); {返回: 65} b := Ord($41); {返回: 65} b := Ord(#$41); {返回: 65} b := Byte('A'); {返回: 65} b := Byte(#65); {返回: 65} b :=

Delphi的字符及字符串[2]

Delphi的字符及字符串[2] - Char.AnsiChar.WideChar.PChar.PAnsiChar.PWideChar //单字符 Char.AnsiChar (在目前版本(2007)中, 它们是一回事, 只有 1 字节大小)var c: Char; {Char 类型的取值范围是: #0..#255, 用十六进制表示是: #$0..#$FF} begin { 用十进制方式赋值:} c := #65; ShowMessage(c); {A} {用十六进制方式赋值:} c := #$

Delphi的字符及字符串[4]

//字符串与字符数组var arr: array[0..5] of Char; str: string; begin {可以把字符串常量直接赋给字符数组; 但超界不行} arr := 'Delphi'; ShowMessage(arr); {Delphi} {可以把字符数组直接赋给字符串变量} str := arr; ShowMessage(str); {Delphi} {但不能把一个字符串变量赋给字符数组} //arr := str; {错误} {其实字符串内部也是包含了一个字符数组, 所以能

Delphi的字符及字符串[5]

Windows API 中的字符串对应这 Delphi 的 PChar(PAnsiChar); 在 API 中使用 Delphi 的字符串还 是比较灵活的. 先说赋值://赋值方法1: 给直接量 begin SetWindowText(Handle, '新标题'); end; //赋值方法2: 定义它要的类型 var p: PChar; begin p := '新标题'; SetWindowText(Handle, p); end; //赋值方法3: 转换成它要的类型 var str: stri

Delphi的字符及字符串[3]

//String 的指针地址及实际的内存地址 var str: string; pstr: PString; pc: PChar; begin {在没有给 str 赋值以前, 既然声明了, 就有了指针地址 (@str):} ShowMessage(IntToStr(Integer(@str))); {1244652; 这是在栈中的 str 的指针地址} {但现在还没有分配真正储存字符串内存} ShowMessage(IntToStr(Integer(str))); {0; 0 就是 null}

Delphi调用WinAPI 字符及字符串函数(1)

CharLower - 字符或字符串转小写 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5:

Delphi调用WinAPI 字符及字符串函数(3)

CharUpper - 字符或字符串转大写 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Button4: TButton; Button5:

Swift字符与字符串

直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会 1 import Foundation 2 3 4 /*******************字符********************/ 5 /* 6 1.单个字符来指定字符常量,如"A"."9" 7 2.转义字符表示特殊字符常量,如"\n"."\t" 8 3.使用 \u{n} 的Unicode形式,n代表一个1-8位的十六进制数 9 4.必须用双引号包起来

[叩响C#之门]第2章 2.3 字符和字符串

2.3 字符和字符串 计算机除了数字计算外,还要处理字符.字符包括英文字母.希腊字母.各种特殊符号以及汉字等,甚至包括0~9这十个数字符号.那么在C#中是如何表示字符呢?