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