package ber import ( "io" ) func UnmarshalLen(r io.ByteReader) int { b, _ := r.ReadByte() if b&0x80 == 0 { return int(b) } n := int(b & 0x7f) var i int for k := 0; k <= n; k++ { b, _ := r.ReadByte() i |= int(b) << uint(k*8) } return i } func unmarshalLen(b []byte) (i, n int) { if b[0]&0x80 == 0 { return int(b[0]), 1 } n = int(b[0] & 0x7f) for k := 0; k <= n; k++ { i |= int(b[k]) << uint((k-1)*8) } return i, n + 1 } func lenLen(i int) (n int) { for ; i > 255; i >>= 8 { n++ } return n + 1 } func MarshalLen(w io.ByteWriter, i int) { if i < 0x80 { w.WriteByte(byte(i)) return } n := lenLen(i) w.WriteByte(byte(n) | 0x80) for ; n > 0; n-- { w.WriteByte(byte(i) >> uint(n-1) * 8) } return }