Go 中将二进制字节转换为有符号整数和浮点数
Go 中,二进制包提供了转换字节切片([]byte)的方法) 转换为无符号整数(例如 Uint16、Uint32)。但是,没有明确的方法将字节切片转换为有符号整数或浮点数。
为什么省略?
中缺少有符号整数和浮点数转换方法二进制包可能是由于字节顺序影响数字类型从字节解释的方式。字节顺序是指字节在内存中存储的顺序。根据系统架构,字节可以以小端(最低有效字节在前)或大端(最高有效字节在前)的形式排列。
转换为有符号整数
尽管缺乏专用方法,但可以通过类型转换来实现将 []byte 转换为有符号整数。由于无符号和有符号整数具有相同的内存布局,因此转换非常简单:
<code class="go">a := binary.LittleEndian.Uint16(sampleA) a2 := int16(a) // Convert to signed int16</code>
类似地,您可以将 uint64 值转换为 int64 值。
转换为浮点数
将无符号整数转换为浮点数涉及更多。虽然您可以尝试简单的类型转换,但它会导致转换数值,而不是内存表示形式。
相反,请使用 math 包提供的函数:
<code class="go">a := binary.LittleEndian.Uint64(sampleA) a2 := math.Float64frombits(a) // Convert to float64</code>
要将浮点值转换为具有相同内存布局的无符号整数,请使用:
<code class="go">a := math.Float64bits(a2) // Convert float64 to uint64</code>
Read() 和 Write() 便捷函数
二进制包还提供Read() 和 Write() 函数可以在后台执行这些转换。例如:
<code class="go">var pi float64 buf := bytes.NewReader(sampleA) err := binary.Read(buf, binary.LittleEndian, &pi) if err != nil { panic(err) }</code>
以上是如何在 Go 中将二进制字节转换为有符号整数和浮点数?的详细内容。更多信息请关注PHP中文网其他相关文章!