cs_helena123
Messages postés22Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention25 août 2003
-
29 juil. 2003 à 11:47
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 2009
-
29 juil. 2003 à 15:29
Salut les loulous,
je vous remercie deja pour les conseils sur la declaration de champs de bits mais maintenant j ai un probleme de manipulation plus delicat, vous pouvez encore m aider sivouplait ... je veux juste envoyer sur un fichier un paquet de 14 bits et puis le lire pour etre sur qu il est bien arrive ...
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 29 juil. 2003 à 14:04
Pourquoi ne pas utiliser un int16
puis apres tu lui applique des & des | des ! etc ...
avec des flags
par exemple :
si le num de ta version est en b10-b11-b12
soit v le num de la verion
n le nombre qui contient toutes les infos
//vaut en binaire 0001 1100 0000 0000
#define FLAG_VERSION (0x1C00)
v &= 7; // modulo 8, car 0 <= v <=7
v <<= 9; // on decale pour s'aligne sur b10-b11-b12
n &= (!(FLAG_VERSION)); //on met a 0 : b10-b11-b12
n |= v; // on ecrit le num de la version
voila !
je ne sait pas si tout ceci est juste, mais ca y ressemble.
C'est en faite la fonction ChangeVersion(int n,int v);
Je propose cette facon, car avec la structure,
je ne pense pas que l'on puisse faire ceci :
cs_helena123
Messages postés22Date d'inscriptionmardi 4 mars 2003StatutMembreDernière intervention25 août 2003 29 juil. 2003 à 14:12
moi je veux bien tout ce que tu veux mais je ne comprends pas tout, par exemple , ca veut dire quoi : 0x1C00 ...
tu connais un site ou ils expliquent un peu la manipulation de bits car tous les trucs que je trouve c est des int, des char ou des bytes mais jamais bit a bit ... merci d avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 29 juil. 2003 à 15:26
Et bien, 0x1C00 est un nombre,
ici il est ecrit en hexadecimal car il a le prefixe 0x
En binaire il s'ecrit : 0001 1100 0000 0000
je de l'ecrit 4 bits par 4 bit
j'ai supposer que le num de la version etait en b10-b11-b12
donc quand on fait !a
on inverse tous le bit de a : 1->0 et 0->1
on remarque que dans la 3eme colonne :
tout les bits SAUF b10-b11-b12
se rester. Les bits b10-b11-b12 sont mis a zero
On suppose que la version soit 5, i.e. 101 en, binaire
on a ???0 00?? ???? ????
et l'on veut que se soit
???1 01?? ???? ????
donc s'il l'on fais l'operation OU
de ???0 00?? ???? ????
avec 0001 0100 0000 0000
on a:----------------------------
_____ ???1 01?? ???? ????
c'est ce que l'on cherchais !!!
Pour avoir 0001 010 0000 0000
on prend 0000 0000 0000 0101
et on decale 9 fois ver la gauche (noté <<9)
0000 0000 0000 0101 (<<0)
0000 0000 0000 1010 (<<1)
0000 0000 0001 0100 (<<2)
0000 0000 0010 1000 (<<3)
...
0001 0100 0000 0000 (<<9)
Ainsi on arrive a mettre le nouveau numero de la version
sans changer les autres bits !
On fais de-meme (avec qq modif) pour l'ID,le flag, et le type
cs_JCDjcd
Messages postés1138Date d'inscriptionmardi 10 juin 2003StatutMembreDernière intervention25 janvier 20094 29 juil. 2003 à 15:29
exuse le tableau n'est pas passer a cause des blancs !
le premier colone est le num du bit, la seconde n, la 3eme le FLAG_VERSION dont on a inverser les bit, et la dernier colonne
et resultat de l'operation ET