Pointers 在golang中将一个指针转换为另一个类型
我想将float64数字转换为int64数字。也就是说,我希望读取float64寄存器的二进制内容,就像它是一个int64值一样。我的意思是,我想要下面C代码的go等价物Pointers 在golang中将一个指针转换为另一个类型,pointers,go,Pointers,Go,我想将float64数字转换为int64数字。也就是说,我希望读取float64寄存器的二进制内容,就像它是一个int64值一样。我的意思是,我想要下面C代码的go等价物 long y; float x = 1.2; y = * ( long * ) &x; 我该怎么做 这是我的尝试,但不起作用 package main import ( "fmt" ) func main() { x := float64(1.2) y := *((*int64)(&a
long y;
float x = 1.2;
y = * ( long * ) &x;
我该怎么做
这是我的尝试,但不起作用
package main
import (
"fmt"
)
func main() {
x := float64(1.2)
y := *((*int64)(&x))
fmt.Println("Ans: ", y)
}
也就是说,我想读取float64寄存器的二进制内容
如果是int64值
试试math.float64位:
打印Ans:3FF3333
也就是说,我想读取float64寄存器的二进制内容
如果是int64值
试试math.float64位:
打印Ans:3FF3333。Go不允许在不同类型的指针之间进行转换,因为它本身就不安全。但是,如果您仍然想这样做,则在不安全的包中有一个指针类型,它表示指向任意类型的指针 任何类型的指针都可以转换为不安全指针和不安全指针。指针可以转换为任何类型的指针,只要它们具有相同的内存结构。这允许您忽略类型系统,并将任何类型的数据解释为任何其他类型的数据 与Go示例中的C代码完全相同的是:
var y int64
var x float64 = 1.2
y = *(*int64)(unsafe.Pointer(&x))
因此,首先我们将&x转换为unsafe.Pointer,然后将其转换为*int64,最后将其解引用以获得与x具有相同位结构的int64
请记住,这是不安全的软件包中的一个原因。如果您只想知道位是什么,最好使用math.Float64bits。但是,例如,如果必须在浮点上使用位运算符,那么当然必须将其转换为int和back。Go不允许在不同类型的指针之间进行转换,因为它本身就不安全。但是,如果您仍然想这样做,则在不安全的包中有一个指针类型,它表示指向任意类型的指针 任何类型的指针都可以转换为不安全指针和不安全指针。指针可以转换为任何类型的指针,只要它们具有相同的内存结构。这允许您忽略类型系统,并将任何类型的数据解释为任何其他类型的数据 与Go示例中的C代码完全相同的是:
var y int64
var x float64 = 1.2
y = *(*int64)(unsafe.Pointer(&x))
因此,首先我们将&x转换为unsafe.Pointer,然后将其转换为*int64,最后将其解引用以获得与x具有相同位结构的int64
请记住,这是不安全的软件包中的一个原因。如果您只想知道位是什么,最好使用math.Float64bits。但是,例如,如果必须在float上使用位运算符,那么当然必须将其转换为int并返回。将其直接转换为int 64是不够的?y:=int64xRelated,也回答了您的问题:直接将其转换为int64是不够的?y:=int64xRelated,也回答了您的问题: