Вы можете попробовать что-то вроде этого.
package main
import (
"encoding/binary"
"bytes"
"fmt"
)
type Unpacked struct {
C byte
Y int16
Z int16
Q int32
}
type Packed struct {
B [9]byte
}
func main() {
var u Unpacked
var p Packed
var buf = bytes.NewBuffer(make([]byte, 0, len(p.B)))
// Unpacked to Packed
u = Unpacked{1, 2, 3, 4}
if err := binary.Write(buf, binary.BigEndian, &u); err != nil {
fmt.Println(err)
}
if err := binary.Read(buf, binary.BigEndian, &p); err != nil {
fmt.Println(err)
}
fmt.Println("u", u, "to", "p", p)
// Packed to Unpacked
p = Packed{[...]byte{1, 2, 3, 4, 5, 6, 7, 8, 9}}
if err := binary.Write(buf, binary.BigEndian, &p); err != nil {
fmt.Println(err)
}
if err := binary.Read(buf, binary.BigEndian, &u); err != nil {
fmt.Println(err)
}
fmt.Println("p", p, "to", "u", u)
}
.
Output:
u {1 2 3 4} to p {[1 0 2 0 3 0 0 0 4]}
p {[1 2 3 4 5 6 7 8 9]} to u {1 515 1029 101124105}