首页  >  文章  >  后端开发  >  在 Go 中如何将字节数组转换为有符号整数和浮点数?

在 Go 中如何将字节数组转换为有符号整数和浮点数?

Patricia Arquette
Patricia Arquette原创
2024-10-29 07:53:30872浏览

How can I convert byte arrays to signed integers and floats in Go?

Go 中将字节数组转换为有符号整数和浮点数

在 Go 中,二进制包提供了从 []byte 转换无符号整数的函数数组,例如binary.LittleEndian.Uint16()和binary.BigEndian.Uint32()。但是,有符号整数或浮点数没有直接等价物。

缺少有符号整数转换函数的原因

缺少有符号整数转换函数主要是由于事实上,将二进制表示解释为有符号或无符号值是编程逻辑的问题。 []byte 数组本身仅包含原始二进制数据,可以根据应用程序的要求将其解释为有符号或无符号。

如何转换为有符号整数

要将无符号整数值转换为有符号整数,可以使用简单的类型转换。由于相同大小的无符号和有符号整数的内存布局是相同的,因此使用 int16(a) 将 a 从 uint16 转换为 int16 将保留原始二进制表示形式,同时分配适当的符号。

转换为浮点数

从无符号整数转换为浮点数需要更多的参与。 math 包提供了用于此目的的函数:math.Float32frombits() 和 math.Float64frombits()。相反,math.Float32bits() 和 math.Float64bits() 可用于获取浮点值的无符号整数表示。

Binary.Read() 和 Binary.Write() 的使用

二进制包还包括 Read() 和 Write() 函数,可以在后台更有效地执行这些转换。这些函数允许您直接读取类型值,而不需要中间类型转换。

使用 Binary.Read() 进行浮点转换的示例

考虑以下内容例如:

<code class="go">b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}

var pi float64
buf := bytes.NewReader(b)
err := binary.Read(buf, binary.LittleEndian, &pi)
if err != nil {
    fmt.Println("binary.Read failed:", err)
}

fmt.Println(pi) // Output: 3.141592653589793</code>

以上是在 Go 中如何将字节数组转换为有符号整数和浮点数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn