Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def read_bits(self, amt, signed=False):
- """
- read bits from the stream.
- """
- if amt == 0:
- #yes, this needs to be an explicit check, because some types ask for a 0 signed bits,
- #and we don't want to do a negative bit shift.
- return 0
- if signed:
- #not sure if this is actually right.
- sign = self.read_bits(1)
- num = self.read_bits(amt-1)
- if sign:
- mask = (1 << (amt-1))-1
- num = (num ^ mask)+1
- num *= -1
- return num
- result = 0
- for _ in range(amt):
- if self.bit_idx == 0:
- self.bit_read_val = self.read(1)[0]
- bit = (self.bit_read_val >> (7-self.bit_idx)) & 1
- result = (result << 1) | bit
- self.bit_idx = (self.bit_idx + 1)%8
- return result
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement