Считывание кода переменной длины из массива байтов [c #]

#c# #algorithm #gif

#c# #алгоритм #gif

Вопрос:

У меня есть несколько чисел, закодированных в массиве байтов с использованием кода переменной длины. На самом деле это данные изображения GIF89a, которые я должен декодировать.

Поскольку сжатие LZW, используемое для GIF, создает серию кодов переменной длины, от 3 до 12 бит каждый, эти коды должны быть преобразованы в серию из 8-битных байтов, которые будут фактически сохраненными или переданными символами. Коды формируются в поток битов, как если бы они были упакованы справа налево, а затем отбирались по 8 бит за раз для вывода. Предполагая, что массив символов состоит из 8 бит на символ и используя 5-битные коды для упаковки, пример компоновки будет похож на:

       --------------- 
  0  |               |    bbbaaaaa
      --------------- 
  1  |               |    dcccccbb
      --------------- 
  2  |               |    eeeedddd
      --------------- 
  3  |               |    ggfffffe
      --------------- 
  4  |               |    hhhhhggg
      --------------- 
           . . .
      --------------- 
  N  |               |
      --------------- 
  

Как я могу преобразовать его в обычный формат [например, целое число] с помощью c #. Какие-то особенности?

Кроме того, я не могу понять, как распознать, когда размер (в битах) этих чисел увеличивается ( 1 к размеру)? Я просто знаю размер первого числа?

Ответ №1:

Вы хотите использовать поток битов. Смотрите http://www.codeproject.com/KB/cs/bitstream.aspx для наглядного примера.

Комментарии:

1. Спасибо! Это действительно помогло мне! Но, тем не менее, я не могу понять, когда я должен изменить размер кода ( 1)…