Programmation C : 2 unsigned char dans 1 unsigned int. [Résolu]

Messages postés
70
Date d'inscription
mercredi 1 octobre 2008
Dernière intervention
17 avril 2013
- - Dernière réponse : BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
- 10 mai 2010 à 19:57
Bonjours a tous,

J'ai un petit soucis pour stocker 2 unsigned char dans 1 unsigned int.
Je dispose de :
un tableau d'unsigned int :
unsigned int configuration[10];

La structure du programme est la suivante :
#define mask_L 0x00FF
#define mask_H 0xFF00
unsigned int configuration[10];
void main ()
{
if(compteur == 1) // chaque seconde on vient incrémenter le tableau unsigned int
{
switch (cas)
{
case 1 :
configuration[0]&mask_L++; // <- Erreur, je ne sais pas comment faire sa
if((configuration[0]&mask_L) == 255)
{
(configuration[0]&mask_L) = 0;
((configuration[0]&mask_H)>>8)++; // <- Erreur, je ne sais pas comment faire sa

if(((configuration[0]&mask_H)>>8) == 255)
{
(configuration[0]&mask_L) = 0;
((configuration[0]&mask_H)>>8)=0;
configuration[1]&mask_L++; // <- Erreur, je ne sais pas comment faire sa
if((configuration[1]&mask_L) == 255)
{ // Full 16777215s 4660heures
}
}
}

case 2 :

((configuration[1]&mask_H)>>8)++; // <- Erreur, je ne sais pas comment faire sa
if(((configuration[1]&mask_H)>>8) == 255)
{
((configuration[1]&mask_H)>>8) = 0;
(configuration[2]&mask_L)++; // <- Erreur, je ne sais pas comment faire sa

if((configuration[2]&mask_L) == 255)
{
(configuration[2]&mask_L) = 0;
((configuration[2]&mask_H)>>8)++; // <- Erreur, je ne sais pas comment faire sa

if(((configuration[2]&mask_H)>>8)== 255)
{ // Full 16777215s 4660heures
}
}
}
case 3 : ...

}
}

Merci de votre aide.

Cordialement

Romain
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
41
3
Merci
Je fais sur du INT32 (unsigned int).

typedef union _DWPERSO {
struct {
WORD l;
WORD h;
};
DWORD val;
} DWPERSO;

void tstUnion()
{
char buf[24], *c;
DWPERSO dw[2];
// INIT LES 2 a 0
dw[0].val = 0;
dw[1].val = 0;


dw[0].h++; // INCREM PARTIE HAUTE DU 1er
dw[1].l--; // DECREM PARTIE BASSE DU 2eme

// AFFICHAGE PERSO DE TEST
c = bnultoa(dw[0].val, buf);
*c++ = 10;
*bnultoa(dw[1].val, c) = 0;
MessageBox(0, buf, szappname, 0);
}


ciao...
BruNews, MVP VC++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
21054
Date d'inscription
jeudi 23 janvier 2003
Dernière intervention
7 novembre 2014
41
3
Merci
Mets un nom sur la struct:
typedef union _CFG {
struct {
unsigned char l;
unsigned char h;
} PART;
unsigned int val;
} CFG;

CFG config[TailleTab];
Tu accèderas par:
config[0].PART.l

ciao...
BruNews, MVP VC++

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de BruNews
Messages postés
70
Date d'inscription
mercredi 1 octobre 2008
Dernière intervention
17 avril 2013
0
Merci
Avec mon compilo C j'ai un soucis :

typedef union _CFG {
struct {
unsigned char l;
unsigned char h;
}; // W1183C: invalid struct/union member declaration: name required
unsigned int val;
} CFG;

CFG config[TailleTab];
...
Mafonction()
{
config[0].l++; // E4138C: field `l' is undefined in `CFG': operator `.'
if(config[0].l == full_char) // E4138C: field `l' is undefined in `CFG': operator `.'

{ config[0].h++;
config[0].l=0;
if(config[0].h == full_char)
{ config[0].l=0;
config[0].h=0;
config[1].l++;
}
}
configuration[0] = config[0].val;
configuration[1] = config[1].val;
}

Comment résoudre le problème ?
Merci
Cordialement
Romain
Commenter la réponse de romain60112

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.