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(i int) []byte { if i < 0x80 { return []byte{byte(i)} } n := lenLen(i) b := []byte{byte(n) | 0x80} for ; n > 0; n-- { b = append(b, byte(i>>uint((n-1)*8))) } return b }