package ber func intLen(i int64) int { n := 1 for i > 255 { n++ i >>= 8 } for i < -256 { n++ i >>= 8 } return n } func unmarshalInt(b []byte) (i int64) { nn := len(b) neg := b[0]&0x80 != 0 if b[0] == 0xFF { b = b[1:] nn -= 1 } for n, v := range b { if neg { v = ^v } i += int64(v) << uint((nn-n-1)*8) } if neg { i = -i - 1 } return } func marshalInt(i int64) (b []byte) { for n := intLen(i); n > 0; n-- { b = append(b, byte(i>>uint((n-1)*8))) } if i > 0 && b[0]&0x80 != 0 { b = append([]byte{0x00}, b...) } if i < 0 && b[0]&0x80 == 0 { b = append([]byte{0xFF}, b...) } return }