Fichiers binaires, ascii et bcd en C

Résolu
kazoumoulox Messages postés 14 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 5 juin 2006 - 26 avril 2006 à 11:41
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 - 2 mai 2006 à 17:26
salut a tous, je commence a devenir un habitué des questions sur le forum.... je suis tjrs en stage...et un petit problème se pose...
En fait je récupere des fichiers de données provenant d'automates (fichiers en *.IOM), ils sont en binaire...(je les ouvre avec TextPad...) mon programme doit parcourir ces infos contenues dans les fichiers et les inserer dans la base de données locale...
Seulement voila, dans ces fichiers binaires, il y a des info codées en ascii et en bcd (c'est ce qu'il y a écrit dans la doc technique). le bcd est principalement utilisé pour l'heure (2 char pour les heures et 2char pour minutes et secondes qui sont concaténées...). Je ne sais pas comment convertir ces heures en ascii pour pouvoir les inserer dans la base...
je donne un exemple :
-pour heure et minutes concaténés : 51 57 dans le code binaire me donne QW en ascii...mais 51 et 57 sont codés en bcd, comment les convertir en ascii?
Merci de votre aide!!!
++

5 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
2 mai 2006 à 17:26
de l'asscii en soit ça veut rien dire, c'est juste une table de correspondance entre des nombres et des caractères.
Pour ton cas le code que j'ai mis dans ma réponse devrait aller :

lecture :
unsigned char hex;
fread(&hex, 1, 1, file);
int hour = ((hex>>4)&0xf)*10 + (hex&0xf);

écriture :
unsigned char hex = ((hour/10)<<4) | (hour%10);
fwrite(&hex, 1, 1, file);

pour transformer l'heure en chaîne :
char s[16];
sprintf(s, "%d", hour);
3
yoyo269 Messages postés 1403 Date d'inscription lundi 23 février 2004 Statut Membre Dernière intervention 11 janvier 2009 2
26 avril 2006 à 11:50
Le BCD c'est le binaire ?

YOYO, @+.
[font= Comic Sans MS][size=3] [green][:D] YOYO [;)]/green =3Sans MS
0
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
26 avril 2006 à 12:48
tu récupère le code ASCII des caractères :

int heure = (int)'Q'; //te donne 51
0
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
26 avril 2006 à 12:53
BCD : binary coded decimal :

pour ton cas :
51 et 57 sont les codes ASCII de Q et W respectivement exprimé en hexa

ASCII (hex) => dec :
dec = ((hex>>4)&0xf)*10 + (hex&0xf);

dec => ASCII (hex)
hex = ((dec/10)<<4) | (dec%10);

lien :
http://www.danbbs.dk/~erikoest/bcd.htm
0

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

Posez votre question
kazoumoulox Messages postés 14 Date d'inscription mercredi 5 avril 2006 Statut Membre Dernière intervention 5 juin 2006
2 mai 2006 à 16:45
bon en fait je dois préciser, l'automate code en bcd l'heure de fabrication dans le fichier.
lorsque j'ouvre le fichier, toutes mes données sont en ascii, meme cette fameuse heure. il faut ke je la convertisse en ascii pour la stocker en chaine de caracteres. mais je ne sais pas comment faire pour convertir du bcd lu en hexa vers de l'ascii...merci de m'aider...please!
0
Rejoignez-nous