У меня задача изменить случайные байты в файле с заданной вероятностью. Сейчас я читаю и перезаписываю каждый байт в не зависимости от того, меняю я его или нет. Может быть можно сделать так, чтобы переписывать только изменяемый байт? Вот моя прога:
#include
#include
long MODMULT (long a,long b,long m, long s) { //линейный конгруэнтный генератор
s=(a*s +b)%m;
return s;
}
int numberbit[8]={1,2,4,8,16,32,64,128}; //номер изменяемого бита в байте
int main(int argc, char *argv[])
{
unsigned char c;
long a=2311;
long b=25367;
long m=120050;
long s= 235;
long d,g;
float e;
if (argc!=2) {
cout<<» Применение: имя_программы имя_файла\n»;
return 1;
}
fstream f(argv[1],ios::in | ios::out | ios::binary);
if(!f) {
cout<<"Не удалось открыть файл.\n»;
return 1;
}
cout<<"Введите вероятность ошибки:» ;
cin>>e;
d=m*e;
while(!f.eof()){
c=f.get();
g=MODMULT(a,b,m,s);
if (g
long l=MODMULT(a,b,m,s);
if(0 <= l < m/8) c^=numberbit[0];
if(m/8 <= l < m/4) c^=numberbit[1];
if(m/4 <= l < 3*m/8) c^=numberbit[2];
if(3*m/8 <= l < m/2) c^=numberbit[3];
if(m/2 <= l < 5*m/8) c^=numberbit[4];
if(5*m/8 <= l < 3*m/4) c^=numberbit[5];
if(3*m/4 <= l < 7*m/8) c^=numberbit[6];
if(7*m/8 <= l <= m) c^=numberbit[7];
}
f.put(c);
}
f.close();
return 0;
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
Открываешь файл для чтения+записи, переходишь на нужный байт, считываешь, пишишь, закрываешь файл, готово.
см. man open(), write(), read(), lseek(), close().