Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pointers 在golang中将一个指针转换为另一个类型_Pointers_Go - Fatal编程技术网

Pointers 在golang中将一个指针转换为另一个类型

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

我想将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)(&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,也回答了您的问题: