From 74ed90d288238c704395c3912a47db916d151298 Mon Sep 17 00:00:00 2001 From: BiSaXa <1669855+BiSaXa@users.noreply.github.com> Date: Sun, 4 Sep 2022 11:08:23 +0300 Subject: specify little endian, easier reader construct --- bitreader.go | 33 +++++++++++++-------------------- bitreader_test.go | 14 +++++++------- 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/bitreader.go b/bitreader.go index 9d9a273..b105df7 100644 --- a/bitreader.go +++ b/bitreader.go @@ -8,31 +8,24 @@ import ( ) type ReaderType struct { - data []byte - base int - index int - lsb bool + data []byte // Reader data from a byte array + base int // Current reader byte location + index int // Current reader index + le bool // Little endian or big endian? } -func Reader(data []byte) *ReaderType { - return &ReaderType{ - data: data, - base: 0, - index: 0, - lsb: false, - } -} - -func ReaderLSB(data []byte) *ReaderType { - dataReversed := data - for index, byteValue := range data { - dataReversed[index] = bits.Reverse8(byteValue) +func Reader(data []byte, le bool) *ReaderType { + dataClone := data + if le { + for index, byteValue := range data { + dataClone[index] = bits.Reverse8(byteValue) + } } return &ReaderType{ - data: dataReversed, + data: dataClone, base: 0, index: 0, - lsb: true, + le: le, } } @@ -60,7 +53,7 @@ func (reader *ReaderType) ReadBits32(bits int) (int, error) { if err != nil { return -1, err } - if reader.lsb { + if reader.le { var output string // Go to last bit and read backwards from there reader.base += bits / 8 diff --git a/bitreader_test.go b/bitreader_test.go index c29a3bd..aed0930 100644 --- a/bitreader_test.go +++ b/bitreader_test.go @@ -8,7 +8,7 @@ import ( var TestArray = [...]byte{113, 13, 0, 0, 162, 27, 0, 0, 204} func TestReadBit(t *testing.T) { - bitreader := Reader(TestArray[:]) + bitreader := Reader(TestArray[:], false) expected := []bool{false, true, true, true} for i := range expected { value, err := bitreader.ReadBit() @@ -21,8 +21,8 @@ func TestReadBit(t *testing.T) { } } -func TestReadBitLSB(t *testing.T) { - bitreader := ReaderLSB(TestArray[:]) +func TestReadBitLE(t *testing.T) { + bitreader := Reader(TestArray[:], true) expected := []bool{true, false, false, false} for i := range expected { value, err := bitreader.ReadBit() @@ -36,7 +36,7 @@ func TestReadBitLSB(t *testing.T) { } func TestReadBits32(t *testing.T) { - bitreader := Reader(TestArray[:]) + bitreader := Reader(TestArray[:], false) expected := []int{3793354753, 2288779267} // 11100010000110100000000000000001, 10001000011011000000000000000011 expectedBool := []bool{false, false} for i := range expected { @@ -58,7 +58,7 @@ func TestReadBits32(t *testing.T) { } func TestReadBits32LSB(t *testing.T) { - bitreader := ReaderLSB(TestArray[:]) + bitreader := Reader(TestArray[:], true) expected := []int{1720, 1768} // 11010111000, 11011101000 for i := range expected { bitreader.ReadBit() @@ -73,7 +73,7 @@ func TestReadBits32LSB(t *testing.T) { } func TestSkipBits(t *testing.T) { - bitreader := Reader(TestArray[:]) + bitreader := Reader(TestArray[:], false) expected := []bool{true, true, false, true} //00001101 bitreader.SkipBits(12) for i := range expected { @@ -88,7 +88,7 @@ func TestSkipBits(t *testing.T) { } func TestSkipBitsLSB(t *testing.T) { - bitreader := ReaderLSB(TestArray[:]) + bitreader := Reader(TestArray[:], true) expected := []bool{false, false, false, false} //10110000 bitreader.SkipBits(12) for i := range expected { -- cgit v1.2.3