static int NextBit(byte[] src, ref int srcptr, ref int mask, ref int bitsleft) { var bit = mask & 1; mask >>= 1; if ((--bitsleft) == 0) { mask = src.ToUInt16(srcptr); srcptr += 2; bitsleft = 16; } return bit; }