Георгий Скарбовский
80 сообщений
#15 лет назад
Есть задача считать аудио или видео файл и проскремблировать. Язык выполнения с++. С си дружу очень редко, так что считай нуб.. так вот по работе с потоковыми файлами уже битый час ищу инфу в гугле. Может кто подскажет?
Среда разработки VC
Заранее спасибо
Георгий Скарбовский
80 сообщений
#15 лет назад
Крик души.. почему гугл молчит?((
Тимур Ч.
300 сообщений
#15 лет назад
Скремблировать можно по-разному
чем ваc rar a archive file.mp3 -ppassword не устраивает?
Георгий Скарбовский
80 сообщений
#15 лет назад
Скремлировать нужно биты по заданной формуле.. вот и задача от сюда получить побитный код ави файла..
Evgenij L.
50 сообщений
#15 лет назад
Если вы работаете с файлом как с набором байтов\битов, то какая разница что он содержит? вам же не через кодек пропускать эту авишку. соответственно, и гуглить потоковую передачу данных не обязательно(в данном случае). достаточно погуглить чтение\запись файлов и битовые операции.
пример простого шифрования (xor):
Георгий Скарбовский
80 сообщений
#15 лет назад
Спасибо.. это я слва богу за пол дня мучений уже понял) Теперь вопрос как считать весь файл побайтно.. пытаюсь юзать std::ifstream не подскажите?
Evgenij L.
50 сообщений
#15 лет назад
Чтение файлов:

Георгий Скарбовский
80 сообщений
#15 лет назад
Собственно что то получилось.. биты получил по маске следующим (знаю что не лучшим, но всетаки работающим образом) Остается последний вопрос.. как из бит получить чаровский массив переменных.
Фукция получения бит:

char* ByteToBit(char*massiv,int size)
{
char*result=new char;
int pos=0;
for(int j=0;j<size;j++)
{
int mask=128;
for(int i=0;i<8;i++,pos++)
{
result=massiv&mask;
if(result!=0)result=1;
mask=mask>>1;
}
}
return result;

}


к слову использовать бы не хотелось.
Олег Казакевич
702 сообщения
#15 лет назад
Это никуда не годится.

У вас так сразу же начнуться заботы с утечкой памяти и производительностью.
Лучше напишите развернуто - что за формула.
А код придется переписать...
Георгий Скарбовский
80 сообщений
#15 лет назад
Формулой скремблирования пока не занимался. Сейчас задача получить биты и потом просто их собрать обратно в читаемый код. Если всетаки интересует формула - B(i) = A(i)+B(i-5)+B(i-15)

+ это сложение по модулю 2
Evgenij L.
50 сообщений
#15 лет назад
Цитата ("mamamiya"):
B(i) = A(i)+B(i-5)+B(i-15)
а что это за буквы? если B(i)-это бит(i), то что такое A?
по поводу получения битов:
unsigned char e = d & (1 << n); //d has the byte value.
хотя на самом деле проверять значение бита вам и не надо.
у вас в формуле есть (i-15), то есть можно работать с двумя парами байтов. можно написать нечто типа такого:
unsigned short x;
x=(A(i)|(y<<(k-5))|(y<<(k-15)))<<k; //вычисляется бит к
z=z|x; //формируется следующая пара байтов
A(i)-параметр А; к-номер вычисляемого бита; x-х; у-элементы массива, в который прочитан файл; z-следующий элемент.

зы псевдокод. в таком виде не юзабельно.
Георгий Скарбовский
80 сообщений
#15 лет назад
B - бит полученный в результате работы скремблера.
А - исходный бит
Георгий Скарбовский
80 сообщений
#15 лет назад
Получать биты прийдется в любом случае потому что по формуле в 1 такте скремблера используется значения битов из разных байтов..
Олег Казакевич
702 сообщения
#15 лет назад
Если i - это номер бита в потоке, то что делать при таких входных условиях, когда i < 5 или i < 15 ?
Георгий Скарбовский
80 сообщений
#15 лет назад
Тогда b(i-5) = a(i)
Олег Казакевич
702 сообщения
#15 лет назад
В проектах не пробовали размещать ?
Я бы сделал...
Тимур Ч.
300 сообщений
#15 лет назад
Скажу вам откровенно
не занимайтесь ерундой
существуют готовые надежные и быстрые криптоалгоритмы
а ваше скремблирование декодируется на раз
Evgenij L.
50 сообщений
#15 лет назад
То есть пойти к преподавателю(а существует очень высокая вероятность, что это задание от него) и сказать "не занимайтесь ерундой..."?
а биты как таковые получать не нужно, вычисление х в моём предыдущем посте. идея была в том, чтобы работать со структурой из двух пар байтов, первая пара-уже обработанное, вторая-обрабатываемое на сейчас. нечто типа кольцевого буфера на 32 бита
Георгий Скарбовский
80 сообщений
#15 лет назад
Цитата ("Nitrogeniy"):
То есть пойти к преподавателю(а существует очень высокая вероятность, что это задание от него) и сказать "не занимайтесь ерундой..."?

а оно так и есть)) с си работать для зароботка мне еще рановато)))
Буду пробовать как вы описали. Спасибо
Тимур Ч.
300 сообщений
#15 лет назад
Школьники...