Разбор битового потока и порядок следования байтов

Я пытаюсь проанализировать битовый поток, и у меня возникают проблемы с порядком байтов. У меня есть байтовый буфер, и мне нужно иметь возможность считывать битовые поля разной длины, в основном от 1 до 8 бит.

Моя проблема связана с порядком байтов. Когда я выполняю отладчик, нижние 4 бита оказываются в верхней части байта. То есть там, где я ожидаю, что первые два бита будут равны 10 (они должны быть 10), однако первый байт в битовом потоке равен 0xA3 или 1010 0011 при проверке с помощью отладчика. Это означает, что при условии, что биты расположены в «правильном» порядке, первые два бита на самом деле равны 11 (чтение справа налево).

Однако может показаться, что если бы биты были не в правильном порядке и должны быть 0x3A или 0011 1010, у меня тогда было бы 10, как и мои ожидаемые первые два бита.

Это смущает меня, потому что, похоже, дело не в порядке битов, MSb в LSb/LSb в MSb, а скорее в порядке откусывания. Как это произошло? Кажется, именно так это получилось из файла. Есть вероятность, что это недопустимый битовый поток, но я уже видел подобные вещи раньше при чтении файлов в шестнадцатеричных редакторах, покусывания, казалось бы, в «неправильном» порядке.

Я просто запутался и хотел бы помочь понять, что происходит. Я не часто имею дело с вещами на этом уровне.


person Luke    schedule 06.05.2015    source источник
comment
Насколько я понимаю, первые два байта 0xA3 (т.е. 10100011) равны 10, за которыми следует 100011. Я никогда не встречал инверсию полубайтов, порядок следования байтов обычно относится к порядку байтов. Здесь я думаю, что порядок битов противоположен тому, что вы ожидаете.   -  person Serge Ballesta    schedule 06.05.2015


Ответы (1)


Вам не нужно заботиться о порядке битов, потому что в C/C++ у вас нет возможности перебирать биты, используя арифметику указателя. Вы можете манипулировать битами только с помощью побитовых операторов, которые не зависят от порядка битов на локальной машине. То, что вы упомянули в ОП, - это просто вопрос визуализации. Разные отладчики могут выбирать разные способы визуализации битов в байте. В этом вопросе нет правильного или неправильного. Просто есть предпочтения. Что действительно имеет значение, если порядок байтов.

person Lingxi    schedule 06.05.2015
comment
Я думаю, что, возможно, я делаю это правильно, но что-то еще идет не так. - person Luke; 06.05.2015