gpt4 book ai didi

go - 如何将 uint16 序列转换为 float32?

转载 作者:IT王子 更新时间:2023-10-29 01:34:46 27 4
gpt4 key购买 nike

我有一个序列 [66 106 179 86](这些数字是 modbus 中的两个 16 位寄存器)由 modbus 库(conversion code)生成,现在我如何将这个序列转换为32 float ?

我已经尝试将 []uint32{66,106, 179, 86} 作为 Float32frombits 的参数,但不接受 uint32 列表。

最佳答案

使用math.Float32fromBits()

我们可以使用 math.Float32fromBits()从其“二进制”表示中获取 float32 值。但是为了使用它,我们需要将 4 个字节的数据打包成一个 uint32 值。为此,我们可以使用 binary.ByteOrder.Uint32() :

data := []byte{66, 106, 179, 86}

bits := binary.BigEndian.Uint32(data)
f := math.Float32frombits(bits)
fmt.Println(f)

输出(在 Go Playground 上尝试):

58.675133

如果我们只想读取单个 float32 值,此解决方案会更快。

使用binary.Read()

另一种选择是使用 binary.Read()io.Reader 中填充固定大小的值.如果我们将数据作为 byte slice ,我们可以使用 bytes.NewBuffer()从中获取 io.Reader:

data := []byte{66, 106, 179, 86}
var f float32
err := binary.Read(bytes.NewBuffer(data), binary.BigEndian, &f)
fmt.Println(f, err)

输出(在 Go Playground 上尝试):

58.675133 <nil>

如果我们必须从输入中读取一系列 float32 值,则首选此解决方案。

关于go - 如何将 uint16 序列转换为 float32?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50365071/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com