Affecter l'équivalent hexa d'un int décimal dans un char

cs_kididouille Messages postés 20 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 18 janvier 2009 - 29 août 2008 à 14:53
cs_kididouille Messages postés 20 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 18 janvier 2009 - 1 sept. 2008 à 10:07
Bonjour, je bloque:
J'ai une fonction où je recois une date format UTC YYMMDD
on m'envoie un int par exemple 080829 (la date d'aujourd'hui)
je dois faire rentrer cette date sur 3 octets. je n'ai pas bien le choix je fais un tableau de char 3;
Et apres je dois assigner a char[0] le jour char[1] le mois... et pour ce faire je dois passer en hexa
ex: 15 avril 2006 -> 0x06  0x04  0x0F
Quand mon int arrive j'arrive a le décomposer
060415    06   04   15 et apres je voudrais rentrer par exemple
dans mon char[0]  la valeur 15 sous la forme 0x0F. Mais le compilateur comprend
que je veux mettre 2 digits sur un seul char et pète un cable.
je précise je suis en C.
Help please!
A voir également:

5 réponses

SebLinck Messages postés 212 Date d'inscription mardi 17 mai 2005 Statut Membre Dernière intervention 23 juin 2011
29 août 2008 à 15:24
Salut,


As-tu essayé:

char[0]='0x0F';

Cordialement,
Sébastien.
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
29 août 2008 à 15:41
char[0]='0x0F';
Ne marchera jamais avec les ' ' sinon ca veut dire que tu veut affecter 4('0','x','0','F') octets a un char qui ne peut contenir qu'un seul octet..

Sinon j'arrive pas vraiment a cerner ton probleme que veut tu faire exactement?

Neo_Fr
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
29 août 2008 à 17:31
long dwDate=871210; // ou une date quelconque
char swDay=dwDate%100;
char swMonth=(dwDate/100)%100;
char swYear=(dwDate/10000)%100;

C'est ce que tu veux il me semble?
0
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
29 août 2008 à 17:36
Une autre solution:

#define PACK_DATE(dd,mm,yy) (DWORD) (((BYTE)(yy)&0xFF)|((BYTE)((mm)&0xFF)<<8)|((BYTE)((dd)&0xFF)<<16))
#define UNPACK_DATE(x,ddmmyy) *((BYTE*) ddmmyy) = (BYTE) (((x) >> 16) & 0xFF); \
*((BYTE*) (ddmmyy+1)) = (BYTE) (((x) >> 8) & 0xFF); \
*((BYTE*) (ddmmyy+2)) = (BYTE) ((x) & 0xFF)

int main(void)
{
int iDate;
char cDate[4];
iDate = PACK_DATE(29, 8, 8);
UNPACK_DATE(iDate, cDate);
printf("%i/%i/%i\n", cDate[0], cDate[1], cDate[2]);
system("PAUSE");
return 0;
}

Neo_Fr
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_kididouille Messages postés 20 Date d'inscription lundi 27 mars 2006 Statut Membre Dernière intervention 18 janvier 2009
1 sept. 2008 à 10:07
Nickel!
Merci bien
on bloque souvent sur des trucs tout con!
0
Rejoignez-nous