Bonjour,
Je suis en train de développer un programme en C++. Je dois représenter certaines données en binaire.
J'ai une structure NoeudID qui contient 2 champs clID et indIPSimID en entier.
J'aimerais représenter ces deux champs clID et indIPSimID en binaire sur 32 bits: clID sur 4 bits et indIPSimID sur 28 bits. Alors, j'ai créer une fonction de conversion qui prend en entrée l'entier à convertir et le nombre de bits sur lequel il faut faire la conversion. Voici la fonction:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 struct NoeudID //each of these fields is unique for a given node { string m_RTID; // RTID du noeud int* clID; // cluster ID du noeud: 0 si le noeud est réel; 1 sinon //même chose que sTs int* indIPSimID; // IP adresse du noeud si c'est un noeud réel ou l'ID de simulation si c'est noeud virtuel };
Ensuite, pour faire la représentation des champs en binaire, j'appelle cette fonction binaire; par exemple:
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 /* la fonction de conversion d'un entier en binaire * nbr est l'entier à convertir et nBits est le nombre bits du binaire*/ int* Noeud::binaire(int nbr, int nBits){ int *tab = new int[nBits]; int i= nBits-1; int k=0; do{ tab[i]=nbr%2; nbr=nbr/2; i--; k++; } while(nbr!=0); for(int j = 0; j < nBits - k; j++) tab[j] = 0; return tab; }
N.m_NoeudID.clID = N.binaire(0, 4);
N.m_NoeudID.indIPSimID = N.binaire(1, 28);
N étant une instance d'une classe Toto dans laquelle est définie la fonction binaire. m_NoeudID est un attribut de cette classe.
J'aimerais savoir si cette façon de faire est correcte.
Un ami m'a proposé ce qui suit:
Mais, je ne suis pas convaincu de cette proposition.
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 int zip32bits(char *v) { return ( v[0] | (v[1] << 4 )); } int _tmain(int argc, _TCHAR* argv[]) { int zip =-1; char v[2] = {12, 345}; cout <<"original values: "<<v[0]<<" -- "<<v[1]<<endl; zip = zip32bits(v); cout<< "zipped value: "<<zip<<endl; return 0; }
Ma question est sur trois volets:
1. Est-ce que ce j'ai fait est coorect?
2. Est-ce que ce que la proposition de l'ami est correcte?
3. Est-ce qu'il y une autre façon de faire cette représentation?
Merci d'avance.
Partager