2015-05-06 4 views
2

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

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

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

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

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

+1

Насколько я понимаю, первые два байта '0xA3' (т.е.' 10100011') ** ** '10', а затем' 100011'. Я никогда не обнаруживал, что инверсия инвертируется, и обычно суждение ссылается на порядок ** байт **. Здесь я думаю, что бит-бит ** является противоположностью того, что вы ожидаете. –

ответ

1

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

+0

Думаю, я, возможно, делаю это правильно, но что-то еще происходит не так. – Luke

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