Я пытаюсь проанализировать битовый поток, и у меня возникают проблемы с порядком байтов. У меня есть байтовый буфер, и мне нужно иметь возможность считывать битовые поля разной длины, в основном от 1 до 8 бит.
Моя проблема связана с порядком байтов. Когда я выполняю отладчик, нижние 4 бита оказываются в верхней части байта. То есть там, где я ожидаю, что первые два бита будут равны 10 (они должны быть 10), однако первый байт в битовом потоке равен 0xA3 или 1010 0011 при проверке с помощью отладчика. Это означает, что при условии, что биты расположены в «правильном» порядке, первые два бита на самом деле равны 11 (чтение справа налево).
Однако может показаться, что если бы биты были не в правильном порядке и должны быть 0x3A или 0011 1010, у меня тогда было бы 10, как и мои ожидаемые первые два бита.
Это смущает меня, потому что, похоже, дело не в порядке битов, MSb в LSb/LSb в MSb, а скорее в порядке откусывания. Как это произошло? Кажется, именно так это получилось из файла. Есть вероятность, что это недопустимый битовый поток, но я уже видел подобные вещи раньше при чтении файлов в шестнадцатеричных редакторах, покусывания, казалось бы, в «неправильном» порядке.
Я просто запутался и хотел бы помочь понять, что происходит. Я не часто имею дело с вещами на этом уровне.
0xA3
(т.е.10100011
) равны10
, за которыми следует100011
. Я никогда не встречал инверсию полубайтов, порядок следования байтов обычно относится к порядку байтов. Здесь я думаю, что порядок битов противоположен тому, что вы ожидаете. - person Serge Ballesta   schedule 06.05.2015