glang []byte 如何转换为结构体
时间: 2024-01-02 15:02:57 浏览: 143
go-gps-logger:glang记录器
Go语言中可以使用`encoding/binary`包将字节切片转换为结构体。假设我们有如下的结构体:
```go
type Person struct {
Name string
Age uint8
Score float32
}
```
现在我们有一个字节切片`data`,它包含了一个`Person`结构体的数据。我们可以使用`binary.Read`函数将字节切片转换为`Person`结构体:
```go
import (
"bytes"
"encoding/binary"
"fmt"
)
func main() {
// 假设 data 是一个包含了 Person 结构体数据的 []byte
data := []byte{
0x05, 0x00, 0x00, 0x00, // Name 字符串的长度为 5
0x48, 0x65, 0x6c, 0x6c, 0x6f, // Name 字符串 "Hello"
0x20, // 年龄为 32
0xcd, 0xcc, 0x8c, 0x3f, // 分数为 0.1
}
// 将 data 转换为 Person 结构体
var p Person
buf := bytes.NewReader(data)
err := binary.Read(buf, binary.LittleEndian, &p)
if err != nil {
panic(err)
}
// 输出 Person 结构体的值
fmt.Printf("Name: %s, Age: %d, Score: %f\n", p.Name, p.Age, p.Score)
}
```
在上面的代码中,我们使用`bytes.NewReader`函数将字节切片转换为`io.Reader`接口,然后使用`binary.Read`函数将`io.Reader`接口转换为`Person`结构体。需要注意的是,`binary.Read`函数的第二个参数需要指定字节序,这里我们使用了`binary.LittleEndian`表示小端字节序。
阅读全文