package main

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

type User struct {
	ID        uint16   // 用户ID
	Privilege uint8    // 用户权限
	FpNum     uint8    // 用户登记的指纹数
	SecLevel  uint16   // 用户加密等级
	PIN2      uint32   // 用户编号
	Name      [8]byte  // 用户姓名
	Password  [5]byte  // 密码
	Card      [5]uint8 // 卡ID
}

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

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)
}

转载于:https://my.oschina.net/viney/blog/3034085