我正在开发Go项目,我想使用UDPSocket发送float32值。 我不明白的是,在发送这些数字之前将这些数字转换为字节缓冲区的最佳方法是什么,以及在接收它们之后如何将它们转换回float32。
目前我正在使用我在网上找到的以下功能转换float32-> []字节,但我甚至不确定我是否得到了我想要的内容:
func Float32bytes(float float32) []byte {
bits := math.Float32bits(float)
bytes := make([]byte, 4)
binary.LittleEndian.PutUint32(bytes, bits)
return bytes
}
我仍然不知道如何将它们转换为float32。
答案 0 :(得分:3)
例如,
package main
import (
"encoding/binary"
"fmt"
"math"
)
func Float32Bytes(float float32) []byte {
bits := math.Float32bits(float)
bytes := make([]byte, 4)
binary.LittleEndian.PutUint32(bytes, bits)
return bytes
}
func BytesFloat32(bytes []byte) float32 {
bits := binary.LittleEndian.Uint32(bytes)
float := math.Float32frombits(bits)
return float
}
func main() {
pi := float32(math.Pi)
b := Float32Bytes(pi)
f := BytesFloat32(b)
fmt.Println(f, f == pi, BytesFloat32(Float32Bytes(pi)) == pi)
}
输出:
3.1415927 true true