Représentation d'un entier en binaire dans un programme C++
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:
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:
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:
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.