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 @   朝阳1  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示