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中文网其他相关文章!