Сохранение двоичной даты в файл в переполнении стека

Мой алгоритм производит поток из 9 и 17 бит, и мне нужно найти решение для хранения этих данных в файле. но я не могу просто хранить 9 битов как int и 17 битов как int_32.

Например, если мой алгоритм выдает 10x9bit и 5x17bit, размер файла должен быть 22 байта.

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

Единственная идея, которая у меня есть сейчас, — это использовать bool * vector;

0

Решение

Если вам нужно сохранить динамические биты, то вам, вероятно, следует сохранить два значения: первое — это количество бит (если биты последовательны от 0 до x), или же битовая маска, чтобы сказать, какие биты действительны; Второе — 32-разрядное целое число, представляющее ваши биты.

0

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

Если взять ваш пример буквально: если вы хотите хранить 175 бит и он состоит из неизвестного числа объектов двух разных длин, то файл абсолютно не может быть только 22 байта. Вам нужно знать, что стоит перед вами в файле, вам нужны длины. Если у вас есть только два возможных размера, то это может быть только один бит. 0 означает 9 бит, 1 означает 17 бит.

|0|9bit|0|9bit|1|17bit|0|9bit|1|17bit|1|17bit|...

Так что для вашего примера вам понадобится 10 * (1 + 9) + 5 * (1 + 17) = 190 битов ~ 24 байта. Оставшиеся 2 бита должны быть дополнены нулями, чтобы выровнять по границе байта. Тот факт, что вы будете продолжать читать файл, как если бы был другой объект (потому что вы сказали, что не знаете, как долго файл), не должен быть проблемой, потому что последний такой заполнитель всегда будет меньше 9 бит. По достижении конца файла вы можете выбросить последнее незавершенное чтение.

Этот подход действительно требует реализации манипуляции на уровне битов потока байтового уровня. Что означает тщательную маскировку и логические операции. BASE64 — это именно то, что проще, чем вы, и состоит только из фиксированных 6-битных сущностей, хранящихся в текстовом файле.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector