Как мне читать и записывать поток по 3 бита за раз?

Я пытаюсь сделать ультра-сжатый вариант brainfuck, который является эзотерическим языком программирования с 8 инструкциями. Поскольку 3 бита — это минимальный объем памяти для хранения 8 значений, я пошел на это. Часть, на которой я застрял, — это как прочитать число битов, которое не является степенью 2.

Я пытался с помощью std::bitset, но это просто сериализуется в строку, которая составляет 1 байт на бит, что противоположно тому, что я хочу. Как бы я пошел по этому поводу?

-1

Решение

Читайте 3 байта за раз и разбивайте их на 8 пакетов по 3 бита каждый, используя >> и & операторы. Поместите их в обычный массив uint8_t, чтобы упростить последующий доступ и переходы.

5

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

Вы не читаете биты из потока, вы читаете байты из потока.

Итак, вы должны сделать это, а затем переставить биты компонента, как вы хотите, используя побитовую арифметику.

Кстати, тот факт, что компьютеры работают в байтах, также означает, что многие из ваших программ (те, которые не имеют кратных 8 инструкций) обязательно будут тратить впустую пространство.

4