[C] Comment passer un tableau de 2 char en un chiffre hexa

Comment passer un tableau de 2 char en un chiffre hexa [C] - C - Programmation

Marsh Posté le 01-11-2003 à 11:57:57    

Bonjour,
 
Je possède un tableau de deux caractères genre :
 
toto[0]='9';
toto[1]='f';
 
et je voudrais que ça fasse :
 
toto[0]=0x9f;
 
voila

Reply

Marsh Posté le 01-11-2003 à 11:57:57   

Reply

Marsh Posté le 01-11-2003 à 14:05:04    

sscanf(%x)
met un \0 a la fin de ta chaine

Reply

Marsh Posté le 01-11-2003 à 14:44:25    

bah disons que en fait j'ia pleins de tableaux comme ça, je vois pas trop comment utiliser le sscanf

Reply

Marsh Posté le 01-11-2003 à 22:34:08    

0x9f est la REPRESENTATION en hexa de 159 décimal.
toto[0] représente le '9' de cette représentation, toto[1] le 'f'
 
si toto[2] = '\0';
sscanf(chaine, "%x", ..);  // voir l'aide sur sscanf()
permet de mettre dans .. la valeur décimale représentée par chaine donc, ici, 159.

Reply

Marsh Posté le 01-11-2003 à 23:10:20    

okay cool :) merci bien j'ai réussi :)

Reply

Marsh Posté le 01-11-2003 à 23:44:28    

Bon, si il a pas \0 en 3e position, en C crade, on pourrait faire ainsi:
 
 
Tu peux te definir une macro
#define NUMVAL(c) (((c)>='0')&&((c)<='9')):((c)-'0'):\
                  (((c)>='A')&&((c)<='F')):((c)-'A'+ 0x0A):\
                  (((c)>='a')&&((c)<='f')):((c)-'a'+ 0x0A):0xFF)
 
Et la valeur que tu veux est:
 
 (NUMVAL(Toto[0]) * 0x0F) + NUMVAL(Toto[1])  
 
et si tu n'es pas sur de la valeur de tes données, tu peux tester ((NUMVAL(Toto[0]) == 0xFF) || (NUMVAL(Toto[1]) == 0xFF)) pour voir si une de tes données etait fausse.
 
A+,
PS si j'ai posté ca, c'est surtout pour faire plaisir a Taz :whistle:


Message édité par gilou le 01-11-2003 à 23:51:10

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 02-11-2003 à 08:23:43    

Pour l'"achever" ??

Reply

Marsh Posté le 04-11-2003 à 10:14:43    

gilou a écrit :

Bon, si il a pas \0 en 3e position, en C crade, on pourrait faire ainsi:
 
 
Tu peux te definir une macro
#define NUMVAL(c) (((c)>='0')&&((c)<='9')):((c)-'0'):\
                  (((c)>='A')&&((c)<='F')):((c)-'A'+ 0x0A):\
                  (((c)>='a')&&((c)<='f')):((c)-'a'+ 0x0A):0xFF)
 
Et la valeur que tu veux est:
 
 (NUMVAL(Toto[0]) * 0x0F) + NUMVAL(Toto[1])  
 
et si tu n'es pas sur de la valeur de tes données, tu peux tester ((NUMVAL(Toto[0]) == 0xFF) || (NUMVAL(Toto[1]) == 0xFF)) pour voir si une de tes données etait fausse.
 
A+,
PS si j'ai posté ca, c'est surtout pour faire plaisir a Taz :whistle:  


 
bijour:)...
 
cht'ite question :  
hormis le gain de lisibilité:D, y'a un intérêt particulier à pondre une fonction sous forme de macro?

Reply

Marsh Posté le 04-11-2003 à 14:50:56    

Fodger a écrit :


 
bijour:)...
 
cht'ite question :  
hormis le gain de lisibilité:D, y'a un intérêt particulier à pondre une fonction sous forme de macro?

Ben comme c'est pas une fonction, tu as un gain infime puisque tu n'empiles pas de contexte...
Quand ca concerne que des operations arithmetiques tres simples, c'est une pratique courante en C, les macros.
Perso, j'evite tant que faire se peut, pour une raison simple: c'est la merde a debugger, un code plein de macros, puisque le debugger ne voit que la forme expansée de la macro.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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