delphi数据类型转换(转)
不同的类有不同的成员,⼀般⼦类的成员是在⽗类的成员的后⾯增加了新的成员,如果⼦类转为⽗类,那这些新增加的成员虽然还存在,但
是就不可以访问得到了。如果⽗类转为⼦类,那可能导致不可预知的错误,因为某个成员的指针指向的地址根本就不是具有实际成员。
类型的转换也有很多类的,有隐性的和显性的,⼀些专⽤的类型转换函数,会重新建⽴⼀个新类型⽬标对象,然后把就类型的数值移动过去,然后销毁旧对象。⼀些隐性的转换,对象本⾝没改变,就把指针类型换⼀了⼀下。
@⽤于取地址!最⽅便的⽤法:
在调⽤Api的时候,举个例⼦:
我们调⽤Api的时候,经常要⽤到pchar类型,⽽Pchar类型的内存管理是⼀个很头
疼的事情。在使⽤时要先Getmem,最后还要freemem,如果⽤了@就⽅便了。声明⼀
个string类型的变量abc,然后在调⽤的时候使⽤@abc就可以了。
DateTimeToFileDate                    函数将DELPHI的⽇期格式转换为DOS的⽇期格式
DateTimeToStr                              函数将⽇期时间格式转换为字符串
DateTimeToString                        函数将⽇期时间格式转换为字符串
DateToStr                                      函数将⽇期格式转换为字符串
FileDateToDateTime                    函数将DOS的⽇期格式转换为DELPHI的⽇期格式
FloatToDecimal                            函数将浮点数转换为⼗进制数
FloatToStrF                                  函数将浮点数转换为字符串
FloatToStr                                    函数将浮点数转换为字符串
FloatToText                                  函数将给定的浮点数转换为⼗进制数
FloatToTextFmt                            函数将给定的浮点数转换为⼗进制数
IntToHex                                                                  将整型数转换为⼗六进制数
IntToStr                                                                  将整型数转换为字符串
StringToWideChar                        函数将ANSI字符串转换为UNICODE字符串
StrToDate                                      函数将字符串转换为⽇期格式
StrToDateTime                              函数将字符串转换为⽇期/时间格式
StrToFloat                                    函数将给定的字符串转换为浮点数
StrToInt                                        函数将字符串转换为整型
StrToIntDef                                  函数将字符串转换为整型或默认值
StrToTime                                      函数将字符串转换为时间格式
TextToFloat                                  函数将字符串(以NULL结束的格式)转换为浮点数
TimeToStr                                      函数将时间格式转换为字符串
VarToDateTime                              函数将给定的变体转换为⽇期时间
WideCharLenToString                  函数将ANSI字符串转换为UNICODE字符串
WideCharToString                        函数将UNICODE字符串转换为ANSI字符串
WideCharToStrVar                        函数将UNICODE字符串转换为ANSI字符串变量
procedure  GetMem(var  P:  Pointer;  Size:  Integer);
//分配动态内存
function  StrPas(const  Str:  PChar):  string;
//将PChar转换为String
delphi数据类型转换函数
计算机知识    2009-11-26 11:02    阅读100    评论0
字号:⼤⼤中中⼩⼩
在我们编写程序当中,根据不同情况,会使⽤到多种数据类型。当要对不同的类型进⾏操作时,必须要将不同的类型转换成同样的类型。因此熟练地掌握数据类型的转换是⾮常重要的。
1.FloatToStr
功能说明:该函数⽤于将“浮点型”转换成“字符型”。
参考实例:
Edit1.Text := FloatToStr(1.981);
2.IntToStr
功能说明:该函数⽤于将“整数型”转换成“字符型”。
参考实例:
S := IntToStr(10);(注:S为String类型变量。)
3.IntToHex
功能说明:该函数⽤于将“⼗进制”转换成“⼗进制”。该函数有⼆个参数。第⼀个参数为要转换的⼗进制数据,第⼆个参数是指定使⽤多少位来显⽰⼗六进制数据。
参考实例:
Edit1.Text := IntToHex(''100'', 2);
执⾏结果,Edit1.Text等于64。
数组转换成字符串
注意:Delphi没有提供专门的“⼗六进制”转换为“⼗进制”的函数。使⽤StrToInt函数可以实现这个功能。具体代码是:I := StrToInt(''S\'' + ''64'');这时I等于100。加上⼀个''S\''即可将“⼗六进制”转换为“⼗
进制”。
4.StrToInt
功能说明:该函数⽤于将“字符型”转换成“整数型”。
参考实例:
I := StrToInt(''100'');
注意:不能转换如 StrToInt(''ab'')或StrToInt(''好'')这样的类型,因为他们并不存在数字型。
4.2 StrToIntdef('字符',数字)
功能说明:返回字符串S转换成整数
说明字符串⾮整数表达时则返回默认值Default
参考实例:
SpinEdit1.Value := StrToIntDef(Edit1.Text, 0);
注意:当Edit1.Text转换成⾮整数表达时,则返回默认值0。
5.StrToFloat
功能说明:该函数⽤于将“字符型”转换成“浮点型”。
参考实例:
N := StrToFloat(Edit1.Text);
注意:Edit1.Text中的内容为1.981(凡在Edit控件中显⽰的⽂本均为字符串)。N为Double类型,⽤于保存转换后的浮点型数据。
DateTimeToFileDate 函数将DELPHI的⽇期格式转换为DOS的⽇期格式
DateTimeToStr 函数将⽇期时间格式转换为字符串
DateTimeToString 函数将⽇期时间格式转换为字符串
DateToStr 函数将⽇期格式转换为字符串
FileDateToDateTime 函数将DOS的⽇期格式转换为DELPHI的⽇期格式
FloatToDecimal 函数将浮点数转换为⼗进制数
FloatToStrF 函数将浮点数转换为字符串
FloatToStr 函数将浮点数转换为字符串
FloatToText 函数将给定的浮点数转换为⼗进制数
FloatToTextFmt 函数将给定的浮点数转换为⼗进制数
IntToHex 将整型数转换为⼗六进制数
IntToStr 将整型数转换为字符串
StringToWideChar 函数将ANSI字符串转换为UNICODE字符串
StrToDate 函数将字符串转换为⽇期格式
StrToDateTime 函数将字符串转换为⽇期/时间格式
StrToFloat 函数将给定的字符串转换为浮点数
StrToInt 函数将字符串转换为整型
StrToIntDef 函数将字符串转换为整型或默认值
StrToTime 函数将字符串转换为时间格式
TextToFloat 函数将字符串(以NULL结束的格式)转换为浮点数
TimeToStr 函数将时间格式转换为字符串
VarToDateTime 函数将给定的变体转换为⽇期时间
WideCharLenToString 函数将ANSI字符串转换为UNICODE字符串
WideCharToString 函数将UNICODE字符串转换为ANSI字符串
WideCharToStrVar 函数将UNICODE字符串转换为ANSI字符串
⼀、数的类型转换
  把表达式的类型从⼀种类型转化为另⼀种类型,结果值是把原始值截断或扩展,符号位保持不变。例如:数的类型转换举例
字符转换为整数 Integer(′A′)
整数转换为字符 Char(48)
整数转换为1个字节的逻辑型 Boolean(0)
整数转换为2个字节的逻辑型 WordBool(0)
整数转换为4个字节的逻辑型 LongBool(0)
整数转换为10进制pascal型字符串 caption:=intToStr(15)
整数转换为16进制pascal型4位字符串 caption:=intToHex(15,4)
地址转换为长整型数 Longint(@Buffer)
⼆、数的“分开”与“合成”
取32位longint型数的⾼16位数为 hiword(longint-var)
低16位数为 loword(longint-var)
取16位数的⾼8位数为 hibyte(integer_var)
低8位数为 lobyte(integer_var)
取32位地址的段选择符和偏移量段选择符(⾼16位地址)为 selectorof(p)
偏移量(低16位地址)为 offsetof(p)
段选择符和偏移量合成为指针  Ptr(SEG, OFS: Word)相当于C语⾔的宏MK-FP(SEG,OFS)
例如在Windows中,Task DataBase结构0FAh偏移处包含′TD′标识,我们可以容易地编写如下代码观察到这个位于Windows内部的未公开的秘密:
  {函数ptr(seg,ofs)的⽤法,相当于C语⾔的MK-FP(seg,ofs)}
  var p:pbyte;ch:char;
  p:=ptr(getcurrentTask,$FA);
  ch:=char(p^); {结果为ch=′T′}
  p:=ptr(getcurrentTask,$FA+1);
  ch:=char(p^);   {结果为ch=′D′}
三、字符串string 字符数组与指向字
  符串的指针pchar的区别与联系
  这3者的基本概念相同,但有⼀些⾮常细微的差别,在编程时稍不注意就会出错,需⾼度重视。
  1、使⽤指向字符串的指针,如果不是以0结尾,运⾏时就会出现错误。为了避免这种错误,需要在字符串结尾⼈⼯加⼊0 即char(0),或⽤strpcopy函数在字符串结尾⾃动加0。
  例1: 指向字符串的指针,如果不是以0结尾,运⾏时会出现错误:
  {s[0]=3 s[1]=′n′ s[2]=′e′ s[3]=′w′}
  var
  s:string;
p:pchar;
  begin
  s:=′new′;
  label1.caption:=s; {new}
 label2.caption:=intTostr(integer(s[0]));{3是字符串的长度}
  p:=@s[1];{不是以0结尾,莫⽤pchar型指针}
  label3.caption:=strpas(p); {运⾏时出现错误}
  end;
  例2:在字符串结尾⼈⼯加⼊0即char(0),可使⽤指向字符串的指针。
  {s[0]=4 s[1]=′n′ s[2]=′e′ s[3]=′w′ s[4]=0;}
  {p-->′new′}
  var
s:string;
p:pchar;
  begin
  p:=@s[1];
  s:=′new′+char(0); {以0结尾,可⽤pchar型指针}
  label1.caption:=strpas(p); {new}
  label2.caption:=s; {new}
  label3.caption:=intTostr(integer(s[0])); {4是字符串长度}
  end;
  例3: ⽤strpcopy函数赋值会在字符串s结尾⾃动加0。
  {s[0]=4 s[1]=′n′ s[2]=′e′ s[3]=′w′ s[4]=0;}
  {p-->′new′}
  var
s:string;
p:pchar;
  begin
  p:=@s[1];
 strpcopy(p,′new′);{strpcopy函数在字符串结尾⾃动加0}
  label1.caption:=strpas(p);{new}
  label2.caption:=s;{new}
  label3.caption:=intTostr(integer(s[0]));{4}
  end;
  2、下标为0的字符串标识符存放的是字符串长度,字符型数组基本相当于字符串,但不能存放字符串长度。字符串可以⽤s:=′a string′的形式赋值,但是字符型数组a[ ]不可直接⽤a:=′array′的形式赋值,⽤此种形式会出现类型不匹配错误,可选⽤strpcopy函数赋值。
  例4: 字符型数组s[ ]相当于字符串,但没有存放字符串长度的位置。
  {s[1]=′n′ s[2]=′e′ s[3]=′w′ s[4]=0;}
  {p-->′new′}
  var
s:array[1..10] of char;
p:pchar;
  begin
  {s:=′new′+char(0); error}{错误}
  p:=@s[1];
  {p:=@s; is not correct}
  strpcopy(p,′new′);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。