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 :
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
};
et la fonction d'affichage suivante :
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]);
    }
}
exemple du main :

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();
}
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
 
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'){
            ...
        }
    }
}
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.
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 ?