こんな感じだろ。あとは自分でやれや。

#include <stdio.h>
#include "bitio.h"

struct bitout {
 unsigned long bitbuf;
 size_t nbits;
 FILE *fp;
};

void bit_write(BITOUT *out, size_t nbits, unsigned long bits)
{
 if (out->nbits + nbits > 8) {
  putc((out->bitbuf << (8 - out->nbits)) |
(bits >> (nbits - 8 - out->nbits)),
out->fp);
  nbits -= (8 + out->nbits);
 }
 while (nbits > 8) {
  putc(bits >> (nbits - 8), out->fp);
  nbits -= 8;
 }
 out->bitbuf = bits;
 out->nbits = nbits;
}