Skip to content

Latest commit

 

History

History
41 lines (31 loc) · 969 Bytes

File metadata and controls

41 lines (31 loc) · 969 Bytes

bitreader

Provides basic interfaces to read and traverse an io.Reader as a stream of bits, rather than a stream of bytes.

GoDoc

Installation

$ go get github.com/32bitkid/bitreader

Examples

Ever wanted to count the number of 0 bits from the start of a file?

package main

import (
	"os"
	"fmt"
	"github.com/32bitkid/bitreader"
)

func main() {
    file, _ := os.Open("file")
    r := bitreader.NewReader(file)
    n := 0
    for {
        val, err := r.Read1()
        if err != nil || val == true {
            break
        }
        n += 1
    }
    fmt.Printf("The file starts with %d off bits", n)
}

But seriously, this is used for parsing densely packed binary formats where data may not be byte aligned. For example, decoding values packed with Huffman Coding.