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












































-------------------------------
Réponse au message :
-------------------------------
> 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
>
> n° : n ! FLAG_VERSION &
> ------------------------------------------------------
> b00 : ? 1 ?
> b01 : ? 1 ?
> b02 : ? 1 ?
> b03 : ? 1 ?
> b04 : ? 1 ?
> b05 : ? 1 ?
> b06 : ? 1 ?
> b07 : ? 1 ?
> b08 : ? 1 ?
> b09 : ? 1 ?
> b10 : version#1 0 0
> b11 : version#2 0 0
> b12 : version#3 0 0
> b13 : ? 1 ?
> b14 : ? 1 ?
> b15 : ? 1 ?
>
> 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
>
>
>











>











>











>











>
>
>
> -------------------------------
> Réponse au message :
> -------------------------------
>
> > 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
> >
> >
> >
> > -------------------------------
> > Réponse au message :
> > -------------------------------
> >
> > > 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 :
> > >
> > > Packet001.Version_1 = v;
> > >
> > > ???
> > >
> > >
> > >










> > >










> > >










> > >










> > >
> > >
> > >
> > > -------------------------------
> > > Réponse au message :
> > > -------------------------------
> > >
> > > >
> > > >
> > > >
> > > > merci bcp !!!
> > > > ton programme etait en asm et j ai juste pu m en inspirer...
> > > > BisouXXX
> > > >
> > > > -------------------------------
> > > > Réponse au message :
> > > > -------------------------------
> > > >
> > > > > On ecrit et ne lit QUE des octets (multi de 8 bits) !!!
> > > > > Par contre on peut manipuler les bits.
> > > > > BruNews, ciao...
> > > > >
> > > > >
> > > > > -------------------------------
> > > > > Réponse au message :
> > > > > -------------------------------
> > > > >
> > > > > > 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 ...
> > > > > >
> > > > > > voici donc ma declaration :
> > > > > >
> > > > > > #include <conio.h>
> > > > > > #include <fstream.h>
> > > > > >
> > > > > >
> > > > > > int main(int argc, char* argv[])
> > > > > > {
> > > > > >
> > > > > > typedef struct Packet_ID // definition du champs de bits
> > > > > > {
> > > > > > unsigned Version_1 :1;
> > > > > > unsigned Version_2 :1;
> > > > > > unsigned Version_3 :1;
> > > > > > unsigned Type :1;
> > > > > > unsigned Flag :1;
> > > > > > unsigned Process_ID1 :1;
> > > > > > unsigned Process_ID2 :1;
> > > > > > unsigned Process_ID3 :1;
> > > > > > unsigned Process_ID4 :1;
> > > > > > unsigned Process_ID5 :1;
> > > > > > unsigned Process_ID6 :1;
> > > > > > unsigned Process_ID7 :1;
> > > > > > unsigned Process_ID8 :1;
> > > > > > unsigned Process_ID9 :1;
> > > > > >
> > > > > > } Packet_ID ; // 14 Bits
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > Packet_ID Packet001 ;
> > > > > > Packet001.Version_1 = 0 ;
> > > > > > Packet001.Version_2 = 0 ;
> > > > > > Packet001.Version_3 = 0 ;
> > > > > > Packet001.Type = 0 ;
> > > > > > Packet001.Flag = 1 ;
> > > > > > Packet001.Process_ID1 = 1 ;
> > > > > > Packet001.Process_ID2 = 0 ;
> > > > > > Packet001.Process_ID3 = 1 ;
> > > > > > Packet001.Process_ID4 = 1 ;
> > > > > > Packet001.Process_ID5 = 0 ;
> > > > > > Packet001.Process_ID6 = 1 ;
> > > > > > Packet001.Process_ID7 = 1 ;
> > > > > > Packet001.Process_ID8 = 1 ;
> > > > > > Packet001.Process_ID9 = 0 ;
> > > > > >
> > > > > >
> > > > > > // envoyer
> > > > > >
> > > > > > ofstream outfile("names.dat", ios::binary);
> > > > > > outfile.write((char*)&Packet001, sizeof(Packet_ID));
> > > > > >
> > > > > > // lire
> > > > > >
> > > > > > ifstream infile ("names.dat",ios::binary);
> > > > > > if (!infile) return 0 ;
> > > > > > Packet_ID Packet002 ;
> > > > > > infile.read((char*)&Packet002,sizeof(Packet_ID));
> > > > > > cout << ((char*)&Packet002) ;
> > > > > > getch();
> > > > > > return 0;
> > > > > > }
> > > > > >
> > > > > > et quand je lance ca, il me mets sur la console 0000 et 2 signes bizarres ...
> > > > > >
> > > > > > je suis a nouveau perdue ...
> > > > > > BisouXXX
> > > > >
> > > >
> > >
> >
>