Skip to content

jcalabro/leb128

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

leb128

GoDoc Tests codecov

Go implementation of signed/unsigned LEB128. Encodes/decodes 8 byte integers.

Usage

Full documentation is available at gopkg.dev.

Decoding

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

Encoding

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