Salut � tous,
Voila, j'ai un tableau de 7 int avec des donn�es binaires (0 ou 1). Je souhaiterais cr�er une variable BYTE (unsigned char 0 <> 255) � partir de ces 8 bits ?
merci d'avance
Version imprimable
Salut � tous,
Voila, j'ai un tableau de 7 int avec des donn�es binaires (0 ou 1). Je souhaiterais cr�er une variable BYTE (unsigned char 0 <> 255) � partir de ces 8 bits ?
merci d'avance
Salut,
Tu peut faire comme ca je pense:
En fait tu fais un decalage a chaque fois que t'as 1 et rien si t'as 0, j'ai pas tester par contre.Code:
1
2
3
4
5
6 monResultByte = 0; for(i=0;i<8;i++) { if(tab[i]==1) monResultByte += 1<<i; }
Une m�thode un peu plus C++, test�e :
Hope it helps ! ;)Code:
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 #include <iostream> #include <bitset> #include <string> #include <sstream> #include <vector> int main() { std::vector<int> vecteur; vecteur.push_back(1); vecteur.push_back(0); vecteur.push_back(0); vecteur.push_back(1); vecteur.push_back(1); vecteur.push_back(0); vecteur.push_back(1); vecteur.push_back(0); std::ostringstream oss; std::copy(vecteur.begin(), vecteur.end(), std::ostream_iterator<int>(oss) ); std::bitset<8> octet (oss.str() ); unsigned char value = octet.to_ulong(); // 154 return 0; }
Ouah, eh bien, je viens de trouver en m�me tps une autre m�thode :
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 int bin2dec(char *bin) { int dec = 0; while(*bin) { dec = (2 * dec) + (*bin - '0'); bin++; } return dec; } char binaire[7]; char str[10]; int decimal = 0; for(int i = 0; i<56; i++) { strcat(binaire,itoa(bit_cle[i],str,10)); if ( (i+1) % 8 == 0 ) { decimal = bin2dec(binaire); final.push_back((BYTE)decimal); binaire[0] = '\0'; } }
LOL 8O
Tu n'as visiblement ici qu'une partie du code, car y'a plein de variables non d�clar�es ! :mrgreen:
Ma solution tient en 4 lignes! et fonctionne...
Enfin, tu fais ce que tu veux ! :roll:
d�sol� mais... c'est une blague ou quoi?? :aie:
Le jeu c'est de trouver de pire en pire � chaque r�ponse, c'est �a?
La r�ponse de Kacceda est propre, mais c'est vrai qu'on peut faire bien grave en for�ant.
Nouveau jeu concours:afficher un bool d�fini par 0 ou 1 sous forme "0" ou "1".
Bon je commence:
Je crois que �a marche... pas test� :mouarf:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 template<bool b, class X, class Y> struct if_ { typedef X type; }; template<class X, class Y> struct if_<false,X,Y> { typedef Y type; }; struct AfficheZero { AfficheZero ( void ) { cout << "0"; } }; struct AfficheUn { AfficheUn( void ) { cout << "1"; } }; bool t = 0; if_<t,AfficheZero,AfficheUn>::type Avirer;
A votre tour! ;)
Edit: d�sol� fait un edit pour rire... pas prendre au s�rieux, pas se vexer... Juste une r�action � chaud devant le d�lire direct parti pour l'orbite
La fonction de Kacceda est propre, je n'ai pas dit le contraire, elle prend juste en compte le fait que le tableau est un tableau C.
J'ai juste �crit une autre possibilit� en C++, c'est tout... ;)
Au passage... le test prendra plus de temps que de traiter la valeur elle meme... donc autant faire caCode:
1
2
3
4
5
6
7 monResultByte = 0; for(i=0;i<8;i++) { if(tab[i]==1) monResultByte += 1<<i; }
Bon, ok, je chippotte, pas taper :aie:Code:
1
2
3
4
5
6 monResultByte = 0; for(i=0;i<8;i++) { monResultByte |= tab[i]<<i; }
Quand � l'autre solution "C++"... ouch !!
Merci � tous pour vos r�ponses. D'un cot� vu que je suis un peu nul, je suis content d'avoir trouv� ma solution bourrin tt seul, m�me si les votres sont plus clean ;) !!
A bientot
poukill, � quoi sert ton vector ? Tu ne peux pas rentrer directement les valeurs dans le bitset ?
Il y a des jours o� lorsque je vois les solutions propos�es je me demande si je programme des applications depuis 25 ans ou si je l'ai r�v� ?
La solution de 'ZeGlobox' est �videment la seule qui soit correcte, d'un point de vue pratique en tout cas, universitaire ? je ne sais pas.
N�anmoins, en amont, pourquoi stocker des informations binaires dans un tableau d'entiers ? autant mettre les 8 informations directement dans l'entier final !