From 301bfaa0be958b3b9ac76527c1c1f446fe2f9ff7 Mon Sep 17 00:00:00 2001 From: sawka Date: Thu, 24 Nov 2022 15:16:18 -0800 Subject: [PATCH] write a quick set of functions to pack and unpack byte arrays --- pkg/utilfn/binpack.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 pkg/utilfn/binpack.go diff --git a/pkg/utilfn/binpack.go b/pkg/utilfn/binpack.go new file mode 100644 index 00000000..94cc12a8 --- /dev/null +++ b/pkg/utilfn/binpack.go @@ -0,0 +1,34 @@ +package utilfn + +import ( + "bufio" + "encoding/binary" + "io" +) + +func PackValue(w io.Writer, barr []byte) error { + viBuf := make([]byte, binary.MaxVarintLen64) + viLen := binary.PutUvarint(viBuf, uint64(len(barr))) + _, err := w.Write(viBuf[0:viLen]) + if err != nil { + return err + } + _, err = w.Write(barr) + if err != nil { + return err + } + return nil +} + +func UnpackValue(r *bufio.Reader) ([]byte, error) { + lenVal, err := binary.ReadUvarint(r) + if err != nil { + return nil, err + } + rtnBuf := make([]byte, int(lenVal)) + _, err = io.ReadFull(r, rtnBuf) + if err != nil { + return nil, err + } + return rtnBuf, nil +}