Advertisement
Guest User

Untitled

a guest
Apr 13th, 2021
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.91 KB | None | 0 0
  1. def read_bits(self, amt, signed=False):
  2. """
  3. read bits from the stream.
  4. """
  5.  
  6. if amt == 0:
  7. #yes, this needs to be an explicit check, because some types ask for a 0 signed bits,
  8. #and we don't want to do a negative bit shift.
  9. return 0
  10.  
  11. if signed:
  12. #not sure if this is actually right.
  13. sign = self.read_bits(1)
  14. num = self.read_bits(amt-1)
  15. if sign:
  16. mask = (1 << (amt-1))-1
  17. num = (num ^ mask)+1
  18. num *= -1
  19. return num
  20.  
  21. result = 0
  22. for _ in range(amt):
  23. if self.bit_idx == 0:
  24. self.bit_read_val = self.read(1)[0]
  25. bit = (self.bit_read_val >> (7-self.bit_idx)) & 1
  26. result = (result << 1) | bit
  27. self.bit_idx = (self.bit_idx + 1)%8
  28.  
  29. return result
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement