英文:
How can I convert pointer type in golang
问题
我想将类似于(*float32)的内容转换为(*int32)。
我这样做:
var f float32 = 0.0
var p *int32 = (*int32)(&f) // 错误!
// 无法将 &f (类型为 *float32) 转换为 *int32
我应该如何像在C语言中那样完成这个操作:
float f = 0.0;
int *ip = (int*) &fp;
英文:
I want convert something like (*float32) to (*int32)
I do this
var f float32 = 0.0
var p *int32 = (*int32)(&f) // error!
// cannot convert &f (type *float32) to type *int32
How can I do this like what I'm done in C
float f = 0.0;
int *ip = (*int) &fp;
答案1
得分: 17
你绝对可以用Go语言来完成这个任务。有两种方法,一种是安全的,一种是不安全的:
package main
import (
"encoding/binary"
"fmt"
"math"
"unsafe"
)
func main() {
var f float32
var i int32
// 不安全的方法
f = 1.234
i = *((*int32)(unsafe.Pointer(&f)))
fmt.Println(f, i)
// 安全的方法
var tmp [4]byte
f = 1.234
binary.LittleEndian.PutUint32(tmp[:], math.Float32bits(f))
i = int32(binary.LittleEndian.Uint32(tmp[:]))
fmt.Println(f, i)
}
希望对你有帮助!
英文:
You absolutely can do this in Go. There are two ways. One safe and one unsafe:
package main
import (
"encoding/binary"
"fmt"
"math"
"unsafe"
)
func main() {
var f float32
var i int32
// unsafe
f = 1.234
i = *((*int32)(unsafe.Pointer(&f)))
fmt.Println(f, i)
// safe
var tmp [4]byte
f = 1.234
binary.LittleEndian.PutUint32(tmp[:], math.Float32bits(f))
i = int32(binary.LittleEndian.Uint32(tmp[:]))
fmt.Println(f, i)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论