类型映射及类型转换

2019-01-14

类型映射及类型转换


正如所知,你不能把一个变量赋给另一个不同类型的变量,如果你需要这么做,有两种方法供选择。第一种方法是采用类型映射(Typecasting),它使用一个带有目标数据类型名的函数符号:

var

N: Integer;
 C: Char;
 B: Boolean;

Begin
 N := Integer ('X');
 C := Char (N);
 B := Boolean (0);

你可以在字节长度相同的数据类型之间进行类型映射。在有序类型之间或实型数据之间进行类型映射通常是安全的,指针类型及对象之间也可以进行类型映射 ,只要你明白自己在做什么。

然而,一般来说类型映射是一种较危险的编程技术,因为它允许你访问一个似是而非的值,该值好象是其它值的替身。由于数据类型的内部表示法之间通常互相不匹配,所以当遇到错误时会难以追踪,为此你应尽量避免使用类型映射。

第二种方法是使用类型转换例程。表3.4中总结了各种类型转换例程。其中有些例程所涉及的数据类型将在下一节中讨论。 注意表中没有包括特殊类型(如TDateTime 和variant)的转换例程,也没包括用于格式化处理的特殊例程,如 Format 和 FormatFloat 例程。

表3.4:类型转换系统例程
 

 

             

Chr

将一个有序数据转换为一个ANSI字符

Ord

将一个有序类型值转换为它的序号

Round

转换一个实型值为四舍五入后的整型值

Trunc

转换一个实型值为小数截断后的整型值

Int

返回浮点数的整数部分

IntToStr

将数值转换为字符串

IntToHex

将数值转换为十六进制数字符串

StrToInt

将字符串转换为一个整型数,如字符串不是一个合法的整型将引发异常

StrToIntDef

将字符串转换为一个整数,如字符串不合法返回一个缺省值

Val

将字符串转换为一个数字(传统Turbo Pascal例程用于向后兼容)

Str

将数字转换为格式化字符串(传统Turbo Pascal例程用于向后兼容)

StrPas

将零终止字符串转换为Pascal类型字符串,在32Delphi中这种类型转换是自动进行的

StrPCopy

拷贝一个Pascal类型字符串到一个零终止字符串, 32Delphi中这种类型转换是自动进行的

StrPLCopy

拷贝Pascal类型字符串的一部分到一个零终止字符串

FloatToDecimal

将一个浮点数转换为包含指数、数字及符号的十进制浮点记录类型

FloatToStr

将浮点值转换为缺省格式的字符串

FloatToStrF

将浮点值转换为特定格式的字符串

FloatToText

使用特定格式,将一个浮点值拷贝到一个字符串缓冲区

FloatToTextFmt

同上面例程,使用特定格式,将一个浮点值拷贝到一个字符串缓冲区

StrToFloat

将一个Pascal字符串转换为浮点数

TextToFloat

将一个零终止字符串转换为浮点数



注意:在最近版本的 Delphi Pascal 编译器中,Round 函数是以 CPU 的 FPU (浮点部件) 处理器为基础的。这种处理器采用了所谓的 "银行家舍入法",即对中间值 (如 5.5、6.5) 实施 Round 函数时,处理器根据小数点前数字的奇、偶性来确定舍入与否,如 5.5 Round 结果为 6,而 6.5 Round 结果也为
6, 因为 6 是偶数。


阅读123