Разбор битового потока и Endianness

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

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

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

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

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

2

Решение

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

1

Другие решения


По вопросам рекламы [email protected]