aboutsummaryrefslogtreecommitdiff
path: root/ber
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2015-07-14 13:57:26 +0200
committerDimitri Sokolyuk <demon@dim13.org>2015-07-14 13:57:26 +0200
commitd1e5bdf860d6d7ac3a8f3f8917bbae30f48d4fe5 (patch)
tree250a117fa6b32e4c344751e1f94123628e85dd9e /ber
parentc5bfd836d2331ec058d8835fa605af12fdac04cc (diff)
Change BitString internal representation
Diffstat (limited to 'ber')
-rw-r--r--ber/bits.go28
1 files changed, 14 insertions, 14 deletions
diff --git a/ber/bits.go b/ber/bits.go
index 107cd6b..3d1ca41 100644
--- a/ber/bits.go
+++ b/ber/bits.go
@@ -1,15 +1,17 @@
package ber
// BitString
-type Bits struct {
- Bytes []byte
- Length int
-}
+type Bits []bool
func parseBitString(b []byte) (bs Bits) {
padding := int(b[0])
- bs.Length = (len(b)-1)*8 - padding
- bs.Bytes = b[1:]
+ length := (len(b)-1)*8 - padding
+ for i := 0; i < length; i++ {
+ x := 1 + i/8
+ y := 7 - uint(i%8)
+ bit := b[x]&(1<<y) != 0
+ bs = append(bs, bit)
+ }
return
}
@@ -18,14 +20,12 @@ func UnmarshalBitString(b []byte) Bits {
}
func (bs Bits) String() (s string) {
- for i := 0; i < bs.Length; i++ {
- x := i / 8
- y := 7 - uint(i%8)
- if bs.Bytes[x]&(1<<y) != 0 {
- s += "1"
- } else {
- s += "0"
- }
+ bmap := map[bool]string{
+ true: "1",
+ false: "0",
+ }
+ for _, bit := range bs {
+ s += bmap[bit]
}
return
}