codec/h264/h264dec: added binToInt function and test

This function will convert binary provided as a string and return as int.
This commit is contained in:
Saxon 2019-09-06 10:27:57 +09:30
parent 614f42ec2c
commit 245edafa68
2 changed files with 44 additions and 0 deletions

View File

@ -9,6 +9,7 @@ package h264dec
import (
"errors"
"math"
)
// binToSlice is a helper function to convert a string of binary into a
@ -42,6 +43,21 @@ func binToSlice(s string) ([]byte, error) {
return bytes, nil
}
// binToInt converts a binary string provided as a string and returns as an int.
// White spaces are ignored.
func binToInt(s string) (int, error) {
var sum int
var nSpace int
for i := len(s) - 1; i >= 0; i-- {
if s[i] == ' ' {
nSpace++
continue
}
sum += int(math.Pow(2, float64(len(s)-1-i-nSpace))) * int(s[i]-'0')
}
return sum, nil
}
func maxi(a, b int) int {
if a > b {
return a

View File

@ -0,0 +1,28 @@
package h264dec
import "testing"
func TestBinToInt(t *testing.T) {
tests := []struct {
in string
want int
}{
{in: "101", want: 5},
{in: "1", want: 1},
{in: "00000", want: 0},
{in: "", want: 0},
{in: "1111", want: 15},
{in: "1 111", want: 15},
}
for i, test := range tests {
n, err := binToInt(test.in)
if err != nil {
t.Errorf("did not expect error: %v from binToInt", err)
}
if n != test.want {
t.Errorf("did not get expected result for test %d\nGot: %v\nWant: %v\n", i, n, test.want)
}
}
}