Conversion de données BCD en float - C++ - Programmation
Marsh Posté le 28-02-2008 à 10:10:11
bah tu lis 3 char, ça te donne 6 chiffres décimaux, ensuite tu les combines comme il faut.
Marsh Posté le 23-01-2009 à 13:41:33
Bonjour tout le monde,
Je me permet de remonter le sujet mais malgré Google, je n'ai rien trouvé qui pourrait m'aider ...
Pour un projet de fin d'année, je reçois un tableau d'int en provenance d'un CAN, dans ma doc, on me dit que les données du tableau sont codées en BCD, mon prof n'est pas beaucoup plus a l'aise que moi là dessus et je ne sais pas trop comment m'y prendre, on me dit que les entiers forment une trame codée sur 8 octets et que chaque int (codé en BCD) contiennent en fait 2 chiffres en entiers naturels, ainsi dans ce tableau, je dois extraire finalement 16 caractères.
Si quelqu'un avait un début de piste là dessus
Merci d'avance
Marsh Posté le 23-01-2009 à 13:51:28
Oui, il y a deux chiffres par octet.
Parfois il y a un demi-octet supplémentaire au début ou à la fin pour le signe.
Peut-être qu'il y a une virgule, mais souvent elle est implicite.
La conversion est assez facile à faire.
Marsh Posté le 23-01-2009 à 13:57:04
Merci pour la réponse mais ça ne m'éclaire pas tant que ça...
Au risque de dire une énormité, je dois aller lire les deux premiers octets et me décaler ensuite deux octets et lire les nouveau ?
Un quote de mon énoncé pour être sur que j'ai bien tout retranscris...
Citation : Les informations NMEA sont extraites octet par octet de la trame NMEA. Les chiffres en ASCII sont convertis en valeur décimales est regroupés par deux sur un octet pour optimiser la trame de données qui ne peut dépasser 8 octets |
Marsh Posté le 23-01-2009 à 14:19:15
Affiche tes octets en hexadecimal et tu devrais comprendre la nature du BCD.
Marsh Posté le 23-01-2009 à 14:41:23
Citation : Affiche tes octets en hexadecimal et tu devrais comprendre la nature du BCD. |
C'est que la, je n'ai pas ces trames...
Je ne galère pas tant que ça normalement, mais j'avoue que je n'arrive pas trop a trouver d'aide là-dessus
Marsh Posté le 23-01-2009 à 15:06:54
Le nombre vingt-cinq est stocke en BCD comme le nombre trente-sept (0x25).
Marsh Posté le 23-01-2009 à 20:14:55
Une après-midi plus tard, je n'y arrive toujours pas
Faut avouer que je n'ai jamais fait de manipulation d'octets en C ou C++ et je ne comprends pas trop...
Citation : Le nombre vingt-cinq est stocke en BCD comme le nombre trente-sept (0x25) |
Je ne sais pas comment retrouver 25 à partir de 37, ce n'est pas faute d'avoir essayé
Marsh Posté le 23-01-2009 à 20:33:15
Non testé:
Code :
|
Marsh Posté le 23-01-2009 à 21:14:39
amaurysme a écrit : Une après-midi plus tard, je n'y arrive toujours pas
|
si tu sais pas passer de l'hexa au decimal, on peut rien pour toi aussi ...
0X25 = 2*16+5 = 37
Marsh Posté le 24-01-2009 à 09:48:06
Un Programmeur a écrit : Non testé: |
Ca m'apprendra a envoyer du code non testé écrit avec ma fille sur les genoux.
Il y a au moins deux problèmes dans ce code:
- ordre des chiffres inversé!
- mauvais test de dépassement de capacité
(et naturellement il ne vérifie pas que c'est bien du BCD, mais ça c'était volontaire).
Marsh Posté le 27-02-2008 à 15:10:59
Bonjour,
Je lisun fichier dans lequel des données sont codées en BCD et je dois les décoder.
Quelqu'un pourrait-il me filer un tuyau pour décoder (notamment) des flottants codés sur 3 octets dans le fichier ?
Merci d'avance