こんなんでどう?read_bits, write_bitsは適当に作って。
long read_bits(size_t nbits);
int write_bits(unsigned long bitvector, size_t nbits);
int flush_bits(void)
int sss_read(int start, int step, int stop)
{
 int bits = start;
 int base = 0;
 int code;
 while (bits < stop && (code = read_bits(1)) != EOF && code == 0) {
  base += (1 << bits);
  bits += step;
 }
 if (code == EOF || (code = read_bits(bits)) == EOF) return EOF;
 return code + base;
}
int sss_write(int start, int step, int stop, int code)
{
 int bits = start;
 int base = 0;
 int limit = (1 << start);
 while (bits < stop && code >= limit) {
  write_bits(0, 1);
  base = limit;
  bits += step;
  limit += (1 << bits);
 }
 if (bits < stop) write_bits(1, 1);
 return write_bits(code - base, bits);
}