Как хранить биты в огромном массиве символов для ввода / вывода файла - PullRequest
0 голосов
/ 02 августа 2010

Я хочу хранить много информации в блоке по битам и сохранять ее в файл.

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

Например, я хочу сохранить день, час, минуту в файле.

Мне нужно только 5 бит (день) + 5 бит (час) + 6 бит(Минута) = 16 бит памяти для хранения данных.

Я не могу найти эффективный способ сохранить его в блоке, чтобы поместить в файл.

В моей работе есть некоторые большие проблемы:

  1. длина данных, которую я хочу хранить каждый раз, не является постоянной.Это зависит от поступающей информации.Поэтому я не могу использовать структуру для ее хранения.

  2. в моем блоке не должно быть никаких неиспользуемых битов, я искал некоторые темы, в которых упоминалось, что если я сохраню 30 бит в int (Переменная 4 байта), затем следующие 3 бита, которые я сохраняю, автоматически перейдут к следующему int.но я не хочу, чтобы это произошло !!

  3. Я знаю, что могу использовать сдвиг вправо, сдвиг влево, чтобы поместить число в символ, и поместить символ в блок, но этонеэффективно.

Мне нужен массив символов, в который я могу продолжать помещать указанные биты, и использовать write, чтобы поместить его в файл.

Ответы [ 2 ]

1 голос
/ 02 августа 2010

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

0 голосов
/ 02 августа 2010

Я не видел такой библиотеки. Поэтому я боюсь, что вам придется написать один самостоятельно. Это не будет сложно, в любом случае.

А по поводу эффективности. Этот тип операций всегда требует сдвига и маскирования битов, потому что немногие процессоры поддерживают непосредственную работу с битами, особенно между двумя машинными словами. Разница лишь в том, что вы или ваш компилятор выполняете перевод.

...