首页  >  文章  >  后端开发  >  如何将 Go []byte 转换为 Little/Big-Endian 有符号整数或浮点数?

如何将 Go []byte 转换为 Little/Big-Endian 有符号整数或浮点数?

DDD
DDD原创
2024-10-31 01:15:03267浏览

How do you convert Go []byte to Little/Big-Endian Signed Integer or Float?

将 Go []byte 转换为 Little/Big-Endian 有符号整数或浮点数

将 []byte 中存储的二进制数据转换为数字类型,例如有符号整数或浮点数 -点数需要了解字节顺序。 endianness 定义了字节在内存中存储的顺序,常见的格式有两种:little-endian(最低有效字节在前)和 big-endian(最高有效字节在前)。

虽然 Go 二进制包提供了像 LittleEndian.Uint16() 这样用于将 []byte 转换为无符号整数的函数,有符号整数 (Int16()) 没有直接等价的函数。这是因为字节顺序仅影响数据的解释,而不影响其在内存中的实际表示。

要将无符号整数转换为有符号整数,简单的类型转换就足够了,因为它们共享相同的内存布局。例如:

<code class="go">a := binary.LittleEndian.Uint16(sampleA)
a2 := int16(a)</code>

同样,您可以使用数学包函数 Float32frombits() 和 Float64frombits() 将无符号整数转换为浮点数。

<code class="go">a := binary.LittleEndian.Uint64(sampleA)
a2 := math.Float64frombits(a)</code>

二进制包还提供了 Read() 和 Write() 函数,可以在后台执行这些转换。

<code class="go">import "bytes"

b := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40}

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

// Using Read() produces the same result as using Uint64() and Float64frombits():
a := binary.LittleEndian.Uint64(b)
a2 := math.Float64frombits(a)
fmt.Println(a2)

// Output:
// 3.141592653589793
// 3.141592653589793</code>

以上是如何将 Go []byte 转换为 Little/Big-Endian 有符号整数或浮点数?的详细内容。更多信息请关注PHP中文网其他相关文章!

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