Manipulation de bits! [Résolu]

Signaler
Messages postés
47
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
24 juin 2011
-
Messages postés
47
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
24 juin 2011
-
Salut à tous!


J'ai pas mal de lacunes dans ce domaine et j'aimerai donc avoir vos avis!

J'ai un mot de 32bits que je dois former grâce à plusieurs paramètres que je reçois; typiquement j'ai:

long int mot_a_remplir;
char param_bit1_a_bit8;
char param_bit8_a_bit12;
//...

Etant donné que je dois remplir ce mot avec des paramètres de 4, 8 ou 16 bits; y-a-t'il un moyen de créer une fonction/macro qui prendrait un paramètre et sa position initiale pour les insérer dans le mot a remplir?

J'avoue ne pas connaitre grand chose en manipulation de bits (peut etre que ce que je veux n'est pas la meilleure chose à faire...) donc je suis preneur d'infos!

Merci à vous,


A+

4 réponses

Messages postés
47
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
24 juin 2011

A vrai dire, mon programme est développé pour Windows & Linux avec des bibliothèques génériques, j'ai donc opté pour faire cela(pour ceux que ça intéresse):


#define ENCODE(WORD, MASK, POS, VALUE) ( (WORD & (~(MASK<> POS) & MASK)


/* how it works : */
/* (WORD & (~(MASK< clean bits of mask shifted by pos */
/* ((VALUE & MASK) < set bits of mask shifted by pos according to value */


Merci à toi LA_Tupac et A+!
Messages postés
47
Date d'inscription
jeudi 27 avril 2006
Statut
Membre
Dernière intervention
24 juin 2011

Up!
Merci!!
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

Un long int fait 2 words donc c'est plutôt un short que tu devrais avoir en entrée. Ensuite je pense que les fonction hiword() et loword() de la winapi devraient faire l'affaire.
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

Autant pour moi c'est plutôt:

WORD = LOWWORD(QWORD);
WORD = HIWORD(QWORD);

et ce ne sont pas des fonctions mais des macros. Enfin c'est transparent pour toi