[C] Copie d'un tableau dans un unique integer
NitriK
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous !
Pour une application en C embarqué, je voudrais recopier les valeurs binaires d'un tableau dans un long.
Par exemple si
tab[]={0,0,1,0,0,0,1,0,1,0} je voudrais:
tableau_copie = 0b(00)10001010, soit 138 en décimal.
Voici mon code:
Avec ce code j'obtiens 01000100, c'est à dire 68, au lieu de 138.
Je bloque la dessus depuis plusieurs heures.
La réponse est peut être évidente, mais j'avoue ne plus rien voir...
Une idée ? :)
Nitrik
Pour une application en C embarqué, je voudrais recopier les valeurs binaires d'un tableau dans un long.
Par exemple si
tab[]={0,0,1,0,0,0,1,0,1,0} je voudrais:
tableau_copie = 0b(00)10001010, soit 138 en décimal.
Voici mon code:
tableau_copie = 0; for(i=0;i<10 ;i++) { tableau_copie = (( tableau_copie ) + (tab[i] << (i) )) ; }
Avec ce code j'obtiens 01000100, c'est à dire 68, au lieu de 138.
Je bloque la dessus depuis plusieurs heures.
La réponse est peut être évidente, mais j'avoue ne plus rien voir...
Une idée ? :)
Nitrik
A voir également:
- [C] Copie d'un tableau dans un unique integer
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Copie cachée - Guide
- Imprimer un tableau excel - Guide
2 réponses
Salut,
Le poids fort est le premier élément du tableau donc :
tableau_copie = tableau_copie + ((tab[i])<<(9-i));
A+
Le poids fort est le premier élément du tableau donc :
tableau_copie = tableau_copie + ((tab[i])<<(9-i));
A+
d'abord, ta condition de boucle est <10, donc ta boucle n'arrive jamais a la fin de tableau
et puis pourquoi tu ajoutes i a tab[i] ?
i c'est juste ton compteur non? tu as toute une serie de chiffres qui proviennent du compteur qui sont additionnes avec ton tableau
je suis pas tres sur, mais je pense que c'est ca
essaie avec une autre valeur
et puis pourquoi tu ajoutes i a tab[i] ?
i c'est juste ton compteur non? tu as toute une serie de chiffres qui proviennent du compteur qui sont additionnes avec ton tableau
je suis pas tres sur, mais je pense que c'est ca
essaie avec une autre valeur
ta remarque est fausse. i allant de 0 à 9, ça fait bien 10 terme, de plus, << signifie décalage en bit et pas un ajout.
un truc un peu plus tordu aurai été de faire (juste pour le fun) :
Mais c'est moins élégant car les types utilisé dépendent de l'implémentation.
un truc un peu plus tordu aurai été de faire (juste pour le fun) :
struct champ{ unsigned flood : 6; //pour compléter la structure afin qu'elle est la bonne taille de 16 bits (ou 2 octets), soit un short unsigned bin0 : 1; unsigned bin1 : 1; unsigned bin2 : 1; unsigned bin3 : 1; unsigned bin4 : 1; unsigned bin5 : 1; unsigned bin6 : 1; unsigned bin7 : 1; unsigned bin8 : 1; unsigned bin9 : 1; } champ.flood=0; champ.bin0=tab[0]; champ.bin1=tab[1]; ... long entier_tot=*( (short*)&champ);
Mais c'est moins élégant car les types utilisé dépendent de l'implémentation.
Merci Damlegone32 :)