![]() |
Побитовое чтение бинарника
Стоит задача:
Дан начальный двоичный файл любого формата (mp3,avi, и т.д.) Требуется считать его содержимое и представить его в виде битовой последовательности, язык реализации Borland C++ 3.1 Далее требуется произвести скремблирование и записать результирующий файл. Вопрос: Каким образом можно реализовать побитовое чтение файла? |
1 бит - это 1/8 часть байта, т.е.
Код:
|
можно сделать массив констант чисел степени двойки (1,2,4...128) и каждое число (точнее аски-код символа) проверять.
1.Берем текущую константу (сначала 128) 2.Если константа меньше числа, то текущий бит (1-ый) равен 0, иначе вычитаем из числа константу и текущий бит равен 1. 3.Возвращаемся на шаг 1 для следующего бита (2 бит и константа 64) и т.д. пока мы не проверим все биты. также во многих языках можно сдлеать так: Код:
if x and 128 > 0 then |
а кто тебе не дает читать по 1 байту и сразу разбивать на биты?
Допустим можеш к примеру описать структуру typedef struct _BITS { BYTE b0:1; BYTE b1:1; BYTE b2:1; BYTE b3:1; BYTE b4:1; BYTE b5:1; BYTE b6:1; BYTE b7:1; } BITS, *PBITS; И теперь просто создай переменную BITS b; и считывай сразу в ней 1 байт. И у тебя есть сразу доступ к битам. b.b1 b.b3 итд итп |
| Время: 17:40 |