在Delphi中将整数转换为浮点数

时间:2020-04-12 17:38:14

标签: pointers delphi

有人可以向我解释以下代码吗?它使用Integer并将其转换为Single浮点数,但是如果有人可以分解并详细说明这一点,将会很有帮助。

singleVar := PSingle(@intVar)^

1 个答案:

答案 0 :(得分:4)

这不会将整数转换为浮点数。它将32位整数的字节重新解释为单个字节(也具有32位的浮点数据类型)。

@intVar是内存中整数数据的地址。类型是指向整数(PInteger)的指针。通过编写PSingle(@intVar),您可以告诉编译器假装它是指向单个变量的指针;实际上,您告诉编译器它应该将内存中此位置的数据作为一个整体解释。最后,PSingle(@intVar)^只是取消引用指针。因此,它是内存中此位置上的“单个”值,即原始interpreted现在为单个字节。

将整数的字节解释为单个字节通常不会给您相同的数值。例如,如果整数值为123,则字节为7B00 0000。如果将此字节序列解释为单个字节,则会获得1,72359711111953E-43,它在数值上不等效。

要将实际转换为单个整数,您需要编写singleVar := intVar