Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: 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.

По окончании процесса записи в буфере могут остаться биты, их надо принудительно сбросить
в выходной массив.


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: