在 Go 中,您可以使用 Uint16() 和 Uint32() 方法将无符号整数转换为字节数组binary.BigEndian 和 binary.LittleEndian 类型。但是,您可能已经注意到缺少等效的 Int16() 或 Float32() 方法。
字节序是指给定字节在内存中存储的顺序数字类型。 Go 的二进制包提供了在不同字节序之间进行转换的功能。
要将无符号整数转换为有符号整数,可以使用简单的类型转换。无符号 16 位整数 (uint16) 和有符号 16 位整数 (int16) 的内存布局是相同的。因此,您可以执行以下转换:
<code class="go">a := binary.LittleEndian.Uint16(sampleA) a2 := int16(a)</code>
此转换不会更改内存表示,仅更改类型。
转换无符号整数到浮点数的涉及稍微多一些。 Go 的 math 包提供了无符号整数和浮点数之间转换的函数,例如 math.Float32frombits() 和 math.Float64frombits()。
<code class="go">a := binary.LittleEndian.Uint64(sampleA) a2 := math.Float64frombits(a)</code>
这种转换不会操作内存值,而是“查看”它使用 unsafe 包作为不同类型。
二进制包还提供 Read() 和 Write() 函数,它们执行这些操作引擎盖下的转换。您可以使用这些函数在不同的数字类型和字节数组之间进行转换。
<code class="go">var pi float64 buf := bytes.NewReader(b) err := binary.Read(buf, binary.LittleEndian, &pi) // or a := binary.LittleEndian.Uint64(b) a2 := math.Float64frombits(a)</code>
在此示例中,输入字节数组包含小端格式的 pi 值。 Read() 函数将字节数组转换为 float64 值,而 Uint64() 和 Float64frombits() 手动执行转换。
以上是如何在 Go 中将数字类型转换为 []byte 并返回?的详细内容。更多信息请关注PHP中文网其他相关文章!