有人可以向我解释以下代码吗?它使用Integer
并将其转换为Single
浮点数,但是如果有人可以分解并详细说明这一点,将会很有帮助。
singleVar := PSingle(@intVar)^
答案 0 :(得分:4)
这不会将整数转换为浮点数。它将32位整数的字节重新解释为单个字节(也具有32位的浮点数据类型)。
@intVar
是内存中整数数据的地址。类型是指向整数(PInteger
)的指针。通过编写PSingle(@intVar)
,您可以告诉编译器假装它是指向单个变量的指针;实际上,您告诉编译器它应该将内存中此位置的数据作为一个整体解释。最后,PSingle(@intVar)^
只是取消引用指针。因此,它是内存中此位置上的“单个”值,即原始interpreted现在为单个字节。
将整数的字节解释为单个字节通常不会给您相同的数值。例如,如果整数值为123
,则字节为7B00 0000
。如果将此字节序列解释为单个字节,则会获得1,72359711111953E-43
,它在数值上不等效。
要将将实际转换为单个整数,您需要编写singleVar := intVar
。