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 à 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
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 : 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
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
Tu n'as visiblement ici qu'une partie du code, car y'a plein de variables non déclarées !
Ma solution tient en 4 lignes! et fonctionne...
Enfin, tu fais ce que tu veux !![]()
désolé mais... c'est une blague ou quoi??
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é
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
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 ca
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 !
Partager