Bonjour,
je souhaite réaliser une fonction qui triple les bits d'une chaine de données.
Dans le cas de la chaine de données "10110101101" , la fonction produira donc la chaine de données "111000111111000111000111111000111".
J'utilise la structure suivante :
et la fonction d'affichage suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 typedef struct Donnees Donnees; struct Donnees { char donnees[256]; // une chaine de donnees unsigned int taille; // taille de la chaine };
exemple du main :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 void afficherDonnees(const Donnees * donnees) { unsigned int k; for (k =0 ; k < donnees-> taille ; k++) { printf("%c",donnees->donnees[k]); } }
Je souhaite donc faire la fonction qui encode en triplant chaque bit de la chaine "source".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 void test() { Donnees donnees = {"110010001011", 12}; Donnees triple; encoderTriple(&triple, &donnees); printf("Chaine de donnees originale: "); afficherDonnees(&donnees); printf("\n\nApres codage 'triple bit': "); afficherDonnees(&triple); } int main(void) { test(); }
Comme je dois réutiliser ma fonction d'affichage, j'ai multiplié par 3 la taille du tableau résultat qui contient la nouvelle chaine avec tous les bits triplés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 void encoderTriple(Donnees * resultat, const Donnees * donnees){ unsigned int k,j,compt=0,longueur; resultat->taille = donnees->taille*3; for (k = 0 ; k < resultat->taille ; k++){ resultat->donnees[k]='0'; } for (k =0 ; k < donnees->taille ; k++){ if(donnees->donnees[k]== '1'){ ... } } }
Mais je ne vois pas comment tripler chaque bit de la chaine de données source. J'ai pensé à remplir de 0 le nouveau tableau et ensuite traiter chaque triplet mais je sais pas comment faire cela . Des idées ?![]()
Partager