1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| void Erreur1(char *chaine, int taille)
{
int i, exposant;
unsigned char mask;
for(i=0; i<taille; i+=2)
{
exposant = (int)floor(drand48() * 16);
if(exposant < 8)
{
mask = 1 << exposant;
chaine[i] = (chaine[i]^mask);
}
else
{
mask = 1 << (exposant-8);
chaine[i+1] = (chaine[i+1]^mask);
}
}
return;
}
/**
* Pour TAUX_ERREUR=1 change un bit au hasard dans
* tous les caracteres de la chaine.
* Pour TAUX_ERREUR=0 ne change rien du tout.
* Entre les deux valeurs, toutes les situations
* intermediaires sont possibles.
*/
void Erreur2(char *chaine, int taille)
{
int i, exposant;
unsigned char mask;
for(i=0; i<taille; i++)
{
if(drand48() < TAUX_ERREUR)
{
exposant = (int)floor(drand48() * 16);
if(exposant < 8)
{
mask = 1 << exposant;
chaine[i] = (chaine[i]^mask);
}
else
{
mask = 1 << (exposant-8);
chaine[i+1] = (chaine[i+1]^mask);
}
}
}
return;
}
/**
* Change un caractere au hasard dans chaque chaine.
*/
void Erreur3(char *chaine, int taille)
{
int indice, offset;
indice = (int)floor(drand48() * taille);
offset = (int)floor(drand48() * 256);
chaine[indice] = (chaine[indice] + offset ) % 256;
return;
}
/**
* Pour TAUX_ERREUR=1 change tous les caracteres
* dans chaine.
* Pour TAUX_ERREUR=0 ne change rien du tout.
* Entre les deux valeurs, toutes les situations
* intermediaires sont possibles.
*/
void Erreur4(char *chaine, int taille)
{
int i, offset;
for(i=0; i<taille; i++)
{
if(drand48() < TAUX_ERREUR)
{
offset = (int)floor(drand48() * 256);
chaine[i] = (chaine[i] + offset) % 256;
}
}
return;
} |
Partager