Hice una corrección sobre lo escrito arriba:
El problema es al construir el byte salida a partir del contenido del buffer.
Debo distinguir dos casos:
A) llegaron 8 o menos bits o B) llegaron más de ocho bits (mantengo una variable cant_bits para saber esto)
Caso A) a partir de la posición 0 del buffer y hacia adelante, acumulo sobre salida el producto de cada bit por el factor i (i = 1, 2, 4, ... 128 )
Caso B) en este caso el bit menos significativo del byte salida será el que quedó apuntado por act. A partir de esta posición doy una vuelta entera al buffer y acumulo sobre salida como en el caso anterior.
Adjunto la propuesta con esta corrección.