Автор: oleg_alexeev (28.02.2007 в 21:11)
Я делал примерно так:
char codes[SIZE]; // упакованные данные
int size; // их размер в байтах
int code; // буфер для записываемых бит
int codesize; // число бит в буфере
void PutCode(int nCode, int nCodeSize)
{
code |= (nCode<<codesize);
codesize += nCodeSize;
for (; codesize>=8; codesize-=8)
{
codes[size++] = (char)code;
code >>= 8;
}
}
|
Здесь code - это временный буфер для записываемых бит, codesize - число бит в этом буфере.
Биты хранятся в младших разрядах. При записи новых битов они добавляются в буфер. Если
число бит в буфере станет больше 8, они в виде байта (байтов) пишутся в выходной массив
codes.
По окончании процесса записи в буфере могут остаться биты, их надо принудительно сбросить
в выходной массив.