我希望将(* float32)之类的内容转换为(* int32)
我这样做
var f float32 = 0.0
var p *int32 = (*int32)(&f) // error!
// cannot convert &f (type *float32) to type *int32
我怎样才能像我在C
中所做的那样做float f = 0.0;
int *ip = (*int) &fp;
答案 0 :(得分:5)
你绝对可以在Go中做到这一点。有两种方法。一个安全,一个不安全:
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)
}