Как я могу перекомпилировать биты в битовый поток после изменения их в Perl?Использование Perl для изменения битового потока
настоящее время я использую следующие распаковывать:
my $bits = 5;
my $code = '';
foreach my $i (reverse 0..$bits-1) {
$code <<= 1;
$code |= vec($data,$i,1);
}
Например, вывод может быть 16.
EDIT:
Этот вопрос относится к блоку данных изображение GIF.
Что я пытаюсь сделать, это проложить коды LZW, чтобы соответствовать длине, требуемой методом PDF LZWDecode
.
LZWDecode
ожидает, что 8-битные изображения, в которых <Clear>
-код 256 и <End>
-код 257 (PDF Reference, стр 44.)
Для 5-битных изображений, коды 0-31 карты для цветов в изображении-х глобальная таблица цветов, <Clear>
- 32 и <End>
- 33.
Так что мне нужно повторно упаковать бит-поток, чтобы коды 0-31 остались прежними, но 32+ смещены на 256-32.
Я использую ActiveState Perl для Windows.
Это помогло. Из того, что вы добавили, мы можем вывести, что поле не всегда начинается с нуля, и мы можем сделать вывод, что вы не хотите сбивать другие биты в байте. Он также говорит нам, что вы хотите читать 8 бит за раз, даже если вы сейчас читаете 5. Наконец, он говорит нам, что вы хотите манипулировать целой последовательностью полей (а не только одной) и что вам не нужно для обработки произвольных размеров полей. Но он не говорит нам, как обращаться с дополнением. Что вы делаете с остальными битами? – ikegami