begin process at 2012 05 28 17:20:39
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

binary II


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

binary II

mardi 29 juillet 2003 à 11:47:16 | binary II

helena123

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
mardi 29 juillet 2003 à 12:00:38 | Re : binary II

BruNews

Administrateur CodeS-SourceS
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
mardi 29 juillet 2003 à 12:09:00 | Re : binary II

helena123




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
>
mardi 29 juillet 2003 à 14:04:15 | Re : binary II

JCDjcd

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
> >
>
mardi 29 juillet 2003 à 14:12:05 | Re : binary II

helena123

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
> > >
> >
>
mardi 29 juillet 2003 à 15:26:07 | Re : binary II

JCDjcd

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
> > > >
> > >
> >
>
mardi 29 juillet 2003 à 15:29:06 | Re : binary II

JCDjcd

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
> > > > >
> > > >
> > >
> >
>


Cette discussion est classée dans : process, id, unsigned, packet, packet001


Répondre à ce message

Sujets en rapport avec ce message

Capturer l'Id d'une process quant on a son ThreadID [ par illupo ] Salut,je cherche à obtenir l'ID d'un process connaissant l'ID du Thread qui s'y rattache.Sur MSDN ils disent d'utiliser cette fonction :ThreadId = Get trouver le bon process ID!!! [ par anthraxx ] Je voudrais terminer un processus (avec TerminateProcess) dont je ne connais que le nom du fichier executable (mdm.exe par exemple), et le processus n Sniffing - raw socket [ par krum ] J'ai essayé de coder un programme capable de me donner la description de l'en tete IP et TCP des packets que je reçois d'une certaine IP,mais lorsque pointer sur unsigned char [ par avg ] Bonjour à tous je veut appeler une méthode qui n'est pas la mienne mais j'ai sa documentation qui contient titre de méthode et ses paramètres. Mon pro Traduction C [ par etudtelec ] Salut tous le monde, Je ne développe pas avec le langage C, je fais comme étude Réseaux Mais je viens devant une situation de réseaux et veux comprend Get Process Name From ID [ par zod331 ] Bonjour, Je cherche une fonction pour obtenir le nom d'un processus (sous cette forme name.exe) à partir de son ID Merci Problème avec ntohs et htons sous VS 2010 [ par marroucha ] Bonjour tout le monde, je suis entrain de développer une application qui récupère et affiche les trames réseau mais je confronte un pb de compilation analyseur lexical en C [ par janyoura ] salut je suis chargée de faire un analyseur lexical développé en langage C, j'arrive pas à faire un plan pour mon travail, les principaux structures SDL et windows.h sous sygwin [ par agent933 ] salut je travaille en ce moment sur un programme en langage.grosso modo jutilise le port serie pour recevoir donnees et ensuite utilise une interface Utilisation du type unsigned char [ par zaraki21 ] Bonjour, Je développe actuellement une application en C/C++ pour un périphérique "embarqué" et je dois utiliser le type unsigned char. Je sais que ce


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,248 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales