delphi中的pansichar和pchar等类型的区别

var

c: Char; {Char 类型的取值范围是: #0..#255, 用十六进制表示是: #$0..#$FF}

begin

{用十进制方式赋值:}

c := #65;

ShowMessage(c); {A}

{用十六进制方式赋值:}

c := #$41;

ShowMessage(c); {A}

{用 Chr 函数代替 # 符号}

c := Chr(65);

ShowMessage(c); {A}

c := Chr($41);

ShowMessage(c); {A}

{Char 长度当然会是 1}

ShowMessage(IntToStr(Length(c))); {1}

{Char、AnsiChar 允许这样方便地赋值(也就是和 1 字节长度的字符串是兼容的):}

c := 'B';

ShowMessage(c); {B}

end;

--------------------------------------------------------------------------------

//UniCode 字符 WideChar; 和 AnsiChar 不同, WideChar 是占 2 字节大小.

var

c: WideChar; {WideChar 的取值范围是: #0..#65535, 用十六进制表示是: #$0..#$FFFF}

begin

{WideChar 兼容了 AnsiChar 的 #0..#255; 但占用了 2 字节大小}

c := #65;

ShowMessage(c); {A}

ShowMessage(IntToStr(Length(c))); {1; 这是字符长度}

ShowMessage(IntToStr(SizeOf(c))); {2; 但占用 2 个字节}

{用十六进制赋值}

c := #$4E07;

ShowMessage(c); {万}

ShowMessage(IntToStr(Length(c))); {1; 这是字符长度}

ShowMessage(IntToStr(SizeOf(c))); {2; 但占用 2 个字节}

{用十进制赋值}

c := #19975;

ShowMessage(c); {万}

{如果不超出 #255 的范围是可以直接赋值的}

c := 'B';

ShowMessage(c); {万}

{这样不行}

//c := '万'; {这是 Delphi 的支持问题, 估计 Delphi 2008 应该可以解决}

{可以这样变通一下:}

c := WideString('万')[1];

ShowMessage(c); {万}

{用 WideChar 的方式显示我的名字}

ShowMessage(#19975#19968); {万一}

ShowMessage(#19975 + #19968); {万一}

ShowMessage(#$4e07#$4e00); {万一}

end;

--------------------------------------------------------------------------------

//字符指针 PChar、PAnsiChar; 在当前版本(2007)中它们没有区别.

var

p: PChar;

str: string;

begin

{可以给 PChar 直接赋予字符串常量}

p := '万一';

ShowMessage(p); {万一}

ShowMessage(IntToStr(Length(p))); {4}

{给变量值需要转换}

str := '万一的 Delphi 博客';

p := PChar(str); {转换}

ShowMessage(p); {万一的 Delphi 博客}

ShowMessage(IntToStr(Length(p))); {18}

end;

--------------------------------------------------------------------------------

//宽字符指针 PWideChar

var

p: PWideChar;

str: WideString; {注意这里不是 String}

begin

{可以给 PWideChar 直接赋予字符串常量}

p := '万一';

ShowMessage(p); {万一}

ShowMessage(IntToStr(Length(p))); {2}

{给变量值需要转换}

str := '万一的 Delphi 博客';

p := PWideChar(str); {转换}

ShowMessage(p); {万一的 Delphi 博客}

ShowMessage(IntToStr(Length(p))); {13}

end;