我想将float64数字转换为int64数字。 也就是说,我想读取float64寄存器的二进制内容,就好像它是一个int64值一样。 我的意思是,我想去等效以下C代码

我怎么做?

这是我的尝试,不起作用。


That is, I want to read the binary contents of the float64 register as
if it is a int64 value.

尝试math.Float64bits

https://play.golang.org/p/QB4jqwJD0f

打印Ans: 3ff3333333333333


Go不允许在不同类型的指针之间进行转换,因为它本质上是不安全的。但是,如果仍然要执行此操作,则在unsafe包中有一个Pointer类型,它表示一个指向任意类型的指针。

任何类型的指针都可以转换为unsafe.Pointer,并且unsafe.Pointer可以转换为任何类型的指针,只要它们具有相同的内存结构即可。这使您可以忽略类型系统,并将任何类型的数据解释为任何其他类型的数据。

在您的Go示例中,C代码的确切含??义是:

因此,首先我们将&x转换为unsafe.Pointer,然后将其转换为*int64,最后将其取消引用以获得具有与x相同位结构的int64

请记住,这在unsafe包中是有原因的。如果只想知道位是什么,最好使用math.Float64bits()。但是,例如,如果您必须在float上使用按位运算符,那么您当然必须将其转换为int(并反过来)。