Go implementation of signed/unsigned LEB128. Encodes/decodes 8 byte integers.
Full documentation is available at gopkg.dev.
Read from an io.Reader
in to an int64
or uint64
:
package main
import (
"bytes"
"fmt"
"github.com/jcalabro/leb128"
)
func unsigned() {
// using a buffer of length >10 in either the signed/unsigned case
// will return the error leb128.ErrOverflow
buf := bytes.NewBuffer([]byte{128, 2})
num, err := leb128.DecodeU64(buf)
if err != nil {
panic(err)
}
fmt.Println(num) // 256
}
func signed() {
buf := bytes.NewBuffer([]byte{128, 126})
num, err := leb128.DecodeS64(buf)
if err != nil {
panic(err)
}
fmt.Println(num) // -256
}
func main() {
unsigned()
signed()
}
Convert an int64
or uint64
to a []byte
:
package main
import (
"bytes"
"fmt"
"github.com/jcalabro/leb128"
)
func unsigned() {
buf := leb128.EncodeU64(256)
fmt.Println(buf) // [128 2]
}
func signed() {
buf := leb128.EncodeS64(-256)
fmt.Println(buf) // [128 126]
}
func main() {
unsigned()
signed()
}