2012-04-23 3 views
0

Я столкнулся с проблемой, которую я не могу решить. У меня есть тип файла «ASDF», и в их заголовке я могу получить необходимую информацию для их чтения. Проблема в том, что одно из «полей» имеет длину всего 4 бита.Чтение 4 бит без потери информации

Итак, предположим, что это так:

  • От бита 0 до 8, это индекс текущего узла (я прочитал это уже)
  • От 8 до 16 лет, это показатель для следующий узел (прочитайте это, а)
  • от 16 бит до 20 Длина содержимого (строка, и т.д ..)

так что моя проблема в том, что если я пытаюсь прочитать «длину» с bytereader Я потеряю 4 бита информации или буду «4 бит выключены». Есть ли способ читать только 4 бита?

+0

Вы должны изменить или обернуть bytereader помнить четыре дополнительные биты и возвращать их для следующего вызова (плюс дополнительные биты, считанные из следующего байта при необходимости, и т. д.) – Rup

+0

Просто не используйте ByteReader (что все равно)? –

ответ

1

Вы должны прочитать эти байты, как вы читаете другие затем применить битовую маску 0x0F

Например

byte result = (byte)(byteRead & 0x0F); 

это сохранит нижний четыре бита в результате.

если нужные биты высокие четыре, то вы можете применить оператор сдвига

byte result = (byte)((byteRead & 0x0F) >> 5); 
+0

Я забочусь о том, что после того, как я прочитал «байт», мое поле находится от бит 20, а не 24. В любом случае я могу сменить средство чтения потоков или просто прочитать 4 бита? В противном случае я буду неправильно читать всю информацию:/ – waclock

+0

Ваш потоковый считыватель читает полный байт, а не только 4 бита. Вы применяете маску после чтения. Ваш streamreader уже находится в третьем байте вашего файла. – Steve

Смежные вопросы