aboutsummaryrefslogtreecommitdiff
path: root/ber/base128.go
diff options
context:
space:
mode:
Diffstat (limited to 'ber/base128.go')
-rw-r--r--ber/base128.go32
1 files changed, 32 insertions, 0 deletions
diff --git a/ber/base128.go b/ber/base128.go
new file mode 100644
index 0000000..7e44d76
--- /dev/null
+++ b/ber/base128.go
@@ -0,0 +1,32 @@
+package ber
+
+func base128(n int) (b []byte) {
+ if n == 0 {
+ return []byte{0}
+ }
+ l := 0
+ for i := n; i > 0; i >>= 7 {
+ l++
+ }
+ for i := l - 1; i >= 0; i-- {
+ o := byte(n >> uint(i*7))
+ o &= 0x7F
+ if i != 0 {
+ o |= 0x80
+ }
+ b = append(b, o)
+ }
+ return
+}
+
+func debase128(b []byte) (i, n int) {
+ for _, v := range b {
+ i <<= 7
+ i |= int(v & 0x7f)
+ n++
+ if v & 0x80 == 0 {
+ return
+ }
+ }
+ return
+}