section.c 498 B

12345678910111213141516171819202122232425
  1. #include "section.h"
  2. /* shamelessly stolen from dvbsnoop, but modified */
  3. u32 getBits (const u8 *buf, int startbit, int bitlen)
  4. {
  5. const u8 *b;
  6. u32 mask,tmp_long;
  7. int bitHigh,i;
  8. b = &buf[startbit / 8];
  9. startbit %= 8;
  10. bitHigh = 8;
  11. tmp_long = b[0];
  12. for (i = 0; i < ((bitlen-1) >> 3); i++) {
  13. tmp_long <<= 8;
  14. tmp_long |= b[i+1];
  15. bitHigh += 8;
  16. }
  17. startbit = bitHigh - startbit - bitlen;
  18. tmp_long = tmp_long >> startbit;
  19. mask = (1ULL << bitlen) - 1;
  20. return tmp_long & mask;
  21. }