Go结构体转字节数组

package main

import (
	"bytes"
	"encoding/binary"
	"fmt"
)

type User struct {
	ID        uint16   // 用户ID
	Name      [8]byte  // 用户姓名
	Password  [5]byte  // 密码
}

func NewUser(id uint16) *User {
	return &User{
		ID:       id,
		Name:     [8]byte{},
		Password: [5]byte{},
	}
}

func (obj *User) Encode() ([]byte, error) {
	buf := new(bytes.Buffer)

	if err := binary.Write(buf, binary.LittleEndian, obj); err != nil {
		return nil, err
	}

	return buf.Bytes(), nil
}

func Decode(b []byte) (*User, error) {
	buf := bytes.NewBuffer(b)

	obj := &User{}

	if err := binary.Read(buf, binary.LittleEndian, obj); err != nil {
		return nil, err
	}

	return obj, nil
}

func main() {
	u := NewUser(6)

	b, err := u.Encode()
	if err != nil {
		panic(err)
	}

	fmt.Printf("%x\n", b)

	u1, err := Decode(b)
	if err != nil {
		panic(err)
	}

	fmt.Printf("%x\n", u1)
}

输出

060000000000000000000000000000
&{6 0000000000000000 0000000000}
posted @ 2024-06-27 15:56  朝阳1  阅读(42)  评论(0)    收藏  举报