Delphi 的字符及字符串[1] - string、AnsiString、WideString、String[n]、ShortString
2012-03-22 09:42
190 查看
转自:万一
//最常用的 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 按如下赋值, 那它的首字节(str2[0])肯定储存着字符 'A'}
str2 := 'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii'; {65个}
ShowMessage(str2[0]); {A}
ShowMessage(IntToStr(Ord(str2[0]))); {65; 这是 '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;
//最常用的 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 按如下赋值, 那它的首字节(str2[0])肯定储存着字符 'A'}
str2 := 'iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii'; {65个}
ShowMessage(str2[0]); {A}
ShowMessage(IntToStr(Ord(str2[0]))); {65; 这是 '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;
相关文章推荐
- Delphi 的字符及字符串[1] - string、AnsiString、WideString、String[n]、ShortString
- Delphi 的字符及字符串[1] - string、AnsiString、WideString、String[n]、ShortString
- Delphi 的字符及字符串string、AnsiString、WideString、String[n]、ShortString
- Delphi 的字符及字符串[1] - string、AnsiString、WideString、String[n]、ShortString
- Delphi 的字符及字符串 string、AnsiString、WideString、String[n]、ShortString
- 自写的LastPos,寻找字符串里的最后一个字符,RTL里没有提供这个函数——Delphi的String下标是从1开始的
- Delphi的字符(Char),字符串(String),字符串指针(PChar),字符数组arrayofchar(来自http://delphi.cjcsoft.net/论坛)
- Delphi 的字符及字符串[3] - String 中的秘密
- Delphi 的字符及字符串[3] - String 中的秘密
- Delphi的字符(Char), 字符串(String), 字符串指针( PChar ), 字符数组 array of char
- Delphi的字符(Char),字符串(String),字符串指针(PChar),字符数组arrayofchar
- Lazarus 中的字符串 String,AnsiString,UnicodeString,UTF8String,WideString
- Delphi 的字符及字符串[3] - String 中的秘密
- 字符数组-返回字符串中的某个子串的开始位置,不使用string头文件-C
- 获取String字符串中的某一段字符!
- C++中字符数组和字符串string
- string 中find_last_of的索引是字符串最后的字符,不是开始的字符的位置,记录一下
- js 判断字符串是否包含某字符串,String对象中查找子字符indexOf,查找字符串出现的次数split
- 字符串相互转字符数组 string byte 数组 array of byte
- LeetCode Reverse Vowels of a String(字符串中元音字符反转)