Manipulation de bits!

Résolu
katerson Messages postés 47 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 24 juin 2011 - 22 juin 2011 à 20:53
katerson Messages postés 47 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 24 juin 2011 - 24 juin 2011 à 13:34
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

katerson Messages postés 47 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 24 juin 2011
24 juin 2011 à 13:34
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+!
3
katerson Messages postés 47 Date d'inscription jeudi 27 avril 2006 Statut Membre Dernière intervention 24 juin 2011
23 juin 2011 à 11:25
Up!
Merci!!
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
23 juin 2011 à 20:59
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.
0
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
24 juin 2011 à 09:19
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
0
Rejoignez-nous