[C]Convertion Ascii -> hexa

Convertion Ascii -> hexa [C] - C - Programmation

Marsh Posté le 16-04-2010 à 14:43:20    

Bonjours à tous !  
Je reçoi des informations d'un lien RS232 en Ascii que je voudrais convertire en Hexa, j'ai réaliser un bout de code mais il n'à pas l'air de fonctionner.
(j'utilise un microcontroleur ATMEGA2560 au plus bas niveau donc je ne peux pas utiliser toute les commande du style printf, sscanf, strcmp, stroul...) les pour afficher j'utilise putchar...
voici mon code :
 

Code :
  1. unsigned char asciitohexa(unsigned char C1, unsigned char C2)
  2. {
  3.  unsigned char ret;
  4.  if((C1 >= '0') && (C1 <= '9'))  /*Si caractère 1 est compris entre 0 et 1 */
  5.   ret = (C1 - 0x30) << 4;     /*  << 4 equivalent à multiplication par 16 */
  6.  if((C1 >= 'A') && (C1 <= 'F'))  /*Si caractère 1 est compris entre A et F */
  7.   ret = (C1 - 0x41 + 10) << 4;
  8.  if((C2 >= '0') && (C1 <= '9'))  /*Si caractère 2 est compris entre 0 et 1 */
  9.   ret+= C2 - 0x30;
  10.  if((C2 >= 'A') && (C1 <= 'F'))  /*Si caractère 2 est compris entre A et F */
  11.   ret+= C2 - 0x41 + 10;
  12.  return ret;
  13. }


trouver vous une érreur ?! ou quelque chose de louche dans mon code?

Reply

Marsh Posté le 16-04-2010 à 14:43:20   

Reply

Marsh Posté le 16-04-2010 à 14:56:44    

Tu reçois de l'ASCII, je veux bien, mais c'est de l'hexa que tu reçois en ASCII ?

Reply

Marsh Posté le 16-04-2010 à 15:02:49    

Je recoi un fichier .hex comme celui ci :
 

Code :
  1. :100000000C9472000C948B000C948B000C948B005D
  2. :100010000C948B000C948B000C948B000C948B0034
  3. :100020000C948B000C948B000C948B000C948B0024
  4. :100030000C948B000C948B000C948B000C948B0014
  5. :100040000C948B000C948B000C948B000C948B0004
  6. :100050000C948B000C948B000C948B000C948B00F4
  7. :100060000C948B000C948B000C948B000C948B00E4
  8. :100070000C948B000C948B000C948B000C948B00D4
  9. :100080000C948B000C948B000C948B000C948B00C4
  10. :100090000C948B000C948B000C948B000C948B00B4
  11. :1000A0000C948B000C948B000C948B000C948B00A4
  12. :1000B0000C948B000C948B000C948B000C948B0094
  13. :1000C0000C948B000C948B000C948B000C948B0084
  14. :1000D0000C948B000C948B000C948B000C948B0074
  15. :1000E0000C948B0011241FBECFEFD1E2DEBFCDBF39
  16. :1000F00000E00CBF12E0A0E0B2E0EEE0F2E000E0D1


 
et je voudrais le convertire en Hexa, (ex pour avoir C en hexa = 0x43)

Reply

Marsh Posté le 16-04-2010 à 15:16:19    

Et il est vraiment envoyé en ASCII ? Parce que bon, genre quand un 'A' passe dans le tube, c'est la valeur 0xC en hexadécimal qui passe, ou alors c'est le caractère 'C' ayant la valeur hexadécimale (de mémoire) 0x43 majuscule ou 0x63 minuscule ?
 
Parce que c'est con de transformer des données hexa en texte ASCII pour refaire l'opération inverse, et si t'envoie direct les valeurs en hexa, tu les récupère telles quelles de l'autre côté..

Reply

Marsh Posté le 16-04-2010 à 15:20:44    

Je suis trop un Anne =$ dsl du dérangement, sa fait 1h que je galère, mon code est bon mais je me suis tromper dans les caractère dans les if :
 

Code :
  1. if((C2 >= '0') && (C1 <= '9'))  /*Si caractère 2 est compris entre 0 et 1 */
  2. ret+= C2 - 0x30;
  3. if((C2 >= 'A') && (C1 <= 'F'))  /*Si caractère 2 est compris entre A et F */
  4. ret+= C2 - 0x41 + 10;


 
 
c'est sur que sa marché pas car j'ai mit c2>='0' && C1 <='9' alors que c'est C2 =s
Dsl du dérangement =s et merci quand mm pour l'aide!  

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed