Conversion char en hexa

Conversion char en hexa - C - Programmation

Marsh Posté le 01-01-2014 à 20:03:50    

Salut à tous,
 
Je suis en train de coder un petit truc mais j'ai un petit problème avec la conversion d'un char en hexa.
 
J'ai une variable de type :
 

Code :
  1. char val="03AF8DE9";


 
et je voudrait la convertir en :
 

Code :
  1. unsigned char val[9]={ 0x00,  0x03,  0x0A,  0x0F,  0x08,  0x0D,  0x0E,  0x09};


 
Je voulais faire une fonction du genre :
 
 

Code :
  1. void CharHex(char val, unsigned char *hexa[20]){
  2. int i;
  3. int taille=sizeof(server);
  4. for(i=0; i<taille; i++){
  5.  switch ( val[i] ) {
  6.  case "0":
  7.    hexa[i]=0x00;
  8.    break;
  9.  case "1":
  10.    hexa[i]=0x01;
  11.    break;
  12.  //ETC pour les autres nombres hexa
  13.  default:
  14.    hexa[i]=0x00;
  15.    break;
  16.    }
  17. }
  18. }


 
Mais existe t'il deja une fonction de ce type?
 
Merci et bonne année à tous.

Reply

Marsh Posté le 01-01-2014 à 20:03:50   

Reply

Marsh Posté le 01-01-2014 à 20:37:25    

Bonsoir !
 
Il vous faudra passer un paramètre de type "chaine" de caractère, pas un caractère ... Et mettre ces caractères et pas des chaines dans vos "case".
 
Ensuite, par définition, on a : '1' = '0' + 1, '2' = '0' + 2 ...  
 
Donc, vous pouvez facilement simplifier votre code.
 
Ou alors, déclarez une chaine qui vaut "0123456789ABCDEF", la fonction strchr devrait faire le travail à votre place (si vous êtes familier avec l'arithmétique des pointeurs).
 
Bonne continuation !
 
Edit : Sinon, vous pouvez utiliser strtol, en travaillant un peu sur les paramètres.


Message édité par Farian le 01-01-2014 à 20:39:58
Reply

Marsh Posté le 02-01-2014 à 09:34:28    

Il faut profiter du fait que les chiffres se suivent dans les tables de codification, et qu'il en ait de même pour les lettres.
Le seul petit souci est qu'il y a un petit écart entre le '9' et le 'A' dans les tables. Donc, il faut deux traitements séparés, l'un pour les chiffres, et l'autre pour les lettres. On y arrive facilement, par exemple avec ceci :

for(i=0; i<taille; i++) {
  if (val[i] >= '0' && val[i] <= '9')
     hexa[i] = val[i] - '0';
  else
     if (val[i] >= 'A' && val[i] <= 'F')
        hexa[i] = val[i] - 'A' + 10;
}


Message édité par olivthill le 02-01-2014 à 09:34:52
Reply

Sujets relatifs:

Leave a Replay

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