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.

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
};
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
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;
  }
Ensuite, pour faire la représentation des champs en binaire, j'appelle cette fonction binaire; par exemple:
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:

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;
}
Mais, je ne suis pas convaincu de cette proposition.

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.