2016-05-17 2 views
-1

Я уверен, что получаю цифры от 0 до 7, и мне интересно сделать код максимально эффективным. Я хочу ввести только три наименее значимых бита в двоичный файл, а не весь байт. В любом случае я могу написать только 3 бита? Я получаю огромное количество чисел ... Другим способом, который я нашел, является попытка смять номера (00000001 shl 3 & следующий номер) Хотя всегда есть странный.Эффективное сохранение файлов в C, запись определенных битов в двоичный файл

ответ

3

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


1. И это не было бы эффективно делать это в любом случае. Жесткие диски лучше всего работают с большими кусками; флэш-диски на самом деле требуют для работы с большими блоками (=> для однократного изменения бит требуется полная стирание и перезапись блока); они являются некоторыми причинами, по которым операционные системы и контроллеры дисков делают много кэширования записи.

+0

Я не пытаюсь быть точным на 3-м бите, но, например, массив из 3-х целых, которые могут быть записаны на 24 бита только на 16 бит (3x3 + дополнение), идея состоит в том, чтобы сохранить память –

+2

@ Dreggman45 : вы можете использовать 10 3-битных групп в одном 32-битном int - экономить место, но все обращения (чтение и запись) к данным теперь требуют сдвигов и масок. Удостоверьтесь, что вам действительно нужна такая экономия места и что связанные с этим расходы в порядке. (Также использование 4-битных групп сделает ваш код довольно простым). – Mat

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