Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/64: Рейтинг темы: голосов - 64, средняя оценка - 4.66
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 25
1

Побитовое считывание файла

02.05.2017, 20:31. Показов 12670. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Стоит задача:
Дан начальный файл любого формата (mp3,avi, и т.д.)

Требуется считать его содержимое и представить его в виде битовой последовательности,у меня MVS 2013
Далее требуется произвести скремблирование и записать результирующий файл.

Вопрос: Каким образом можно реализовать побитовое чтение файла?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2017, 20:31
Ответы с готовыми решениями:

Открытие и побитовое чтение jpeg-файла
Здравствуйте уважаемые участники форума. Прошу подсказать, как лучше справиться с задачей....

какая функция осуществляет побитовое чтение файла
какая функция осуществляет побитовое чтение файла подскажите кто знает ...

Заменить считывание с клавиатуры на считывание из файла
Помогите пожалуйста, ни разу не работал со считыванием из файла поэтому не понимаю как и что...

Побитовое считывание bmp-файла
Здравствуйте! Задача состоит в том чтобы прочесть bmp файл и представить его в виде битовой матрицы...

17
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
02.05.2017, 21:01 2
Что, весь файл в единую последовательность? Или блоками?
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 25
02.05.2017, 21:41  [ТС] 3
В теории должно быть так:
Я читаю бит из файла, записываю его в ячейку регистра сдвига, xor этот бит с выходным битом регистра.
В двух словах.
Я не знаю, возможно ли сразу записывать бит в регистр или сначала нужно записать все биты в массив, и только потом записывать их в регистр. Если да, то года нужна только результирующая последовательность..
0
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
02.05.2017, 21:47 4
Чтение из файла идёт байтами, а там уже можешь отдельные биты брать.
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 25
02.05.2017, 22:10  [ТС] 5
То есть считываю байт, разбиваю его на биты и записываю в массив
Тогда вопрос, как реализовать выделение байта? С помощью fget? Ничего дельного посему то не нашел, видимо плохо искал
0
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
02.05.2017, 22:13 6
Про какой массив ты говоришь? Массив байтов у тебя сразу будет. Считывание же блоком идёт. Просто объяви его и используй read().
0
56 / 54 / 33
Регистрация: 05.11.2014
Сообщений: 259
02.05.2017, 22:19 7
Выделить бит из байта можно операциями логического умножения и побитового смещения.

C++
1
bit = (byte >> bit_num) & 0x1;
Не стоит реализовывать прогонку еще через какой-то массив, это займет очень много времени, тем более на файлах мультимедиа.
Лучше считывай из файла хотя бы 4 байтное целое и с ним работай по-битно. Потом следующее целое.
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 25
02.05.2017, 22:58  [ТС] 8
Можно сделать так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
FILE *file;
char buff[4], Arr[32];
 
file = open("test.txt","rb");
read(file, buff, 4);
 
for(int i=0; i < 4; ++i)
{
     int bit;    
     for(int j=0; i < 8; ++j)
     {
            bit = (buff[i] >> j) & 0x1;
           for(int k=0;k<32;k++)
                Arr[i] = bit;
     }
}
А можно присвоить этот самый буфер какой-то переменной?
По-моему так нельзя делать, да?
0
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
02.05.2017, 23:12 9
Зачем тебе вообще переносить биты в Arr? непосредственно в buff их нельзя использовать, что ли?
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 25
02.05.2017, 23:31  [ТС] 10
До меня просто не доходит, как это сделать))
Просто я хотел сделать в отдельную функцию, а если использовать в buff то, как я вижу, придется в этой же функции и писать сам регистр сдвига.
0
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
02.05.2017, 23:31 11
Ну и что? Сдвиг поддерживается для целых типов, а так массивы надо обрабатывать.
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 25
02.05.2017, 23:33  [ТС] 12
Хотя по идее можно же описать сам регистр в отдельной функции, а бит передавать ей в параметр.
Блин, без компа никак, надо пробовать
Скажите, хотя бы с виду, вышеприведенный код рабочий?)
0
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
03.05.2017, 08:20 13
Нет.
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 25
03.05.2017, 09:01  [ТС] 14
Что не так?
0
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
03.05.2017, 09:03 15
Много лишних циклов. Если тебе нужно именно 32, то считывай в int, и будет всего 1 цикл по битам.
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 25
03.05.2017, 09:11  [ТС] 16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
FILE *file;
int buff;
 
file = open("test.txt","rb");
read(file, buff, 1);
 
for(int i=0; i < 32; ++i)
{
     int bit;  
     bit = (buff >> i) & 0x1;
     lfsr(bit);// функция реализации линейного регистра 
                    // сдвига с обратной связью
     }
}
То есть так?
0
7792 / 6559 / 2984
Регистрация: 14.04.2014
Сообщений: 28,668
03.05.2017, 09:35 17
Цикл так, а что там за функция, был же массив.
Никто кроме тебя не знает что дальше с этими битами делается, поэтому трудно сказать.
0
0 / 0 / 0
Регистрация: 09.01.2017
Сообщений: 25
03.05.2017, 09:49  [ТС] 18
Функция регистра сдвига - 21 ячейка в которую записываются биты, с 3 из них делаем xor и получается выходной бит, который xor с битом из файла. Далее следующий бит также xor с новым битом регистра на основе уже другой последовательности, сдвигает все предыдущие и записывается в первую ячейку.

Массив я убрал по вашему же совету, думаю передавать бит сразу в параметр функции будет лучше.
Если вам позволяет время, можно конечно в ЛС, чтобы я подробно все объяснил, но сомневаюсь, что вам интересно это
0
03.05.2017, 09:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.05.2017, 09:49
Помогаю со студенческими работами здесь

Побитовое считывание числа в длинной арифметике
Хочу сделать либу (знаю, что изобретаю очередной велосипед) для работы с длинной арифметикой,...

Побитовое чтение файла
1.Взять файл C:\1.jpg(например) 2.Побитно записать его в C:\2.jpg(например) Я уже пару дней видел...

Побитовое чтение файла
приветствую всех! Возник вопрос. Необходимо открыть файл(любого формата) побитово, как это лучше...

Побитовое чтения файла
Всем здравия! Дело обстоит так, я ни разу не программист, все мои познания в языках...

Побитовое чтение файла
Обьсните, пожалуйста, как происходит чтение побайтово из файла? Открываем поток ...

Побитовое чтение текстового файла
Здравствуйте, перейдем сразу к делу: Нужно побитово считать текстовый файл и далее к каждому биту...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru