[C] Convertion double -> dec -> hex

Convertion double -> dec -> hex [C] - C - Programmation

Marsh Posté le 03-01-2005 à 19:18:05    

Bonjour.
 
Un probleme de conversion un peu spécial pour lequel je n'ai pas trouvé de solution dans les posts existants :
 
J'ai un buffer de char (appelons le charbuff)avec les valeurs suivantes :
'2' '3' '3' '0' '9' '8' ... bref etc jusqu'a l'indice 14.
 
Je souhaite convertir ce buffer en une valeur numerique.
Vu la taille du merdier je pense utiliser un "double" et une methode bourrine du genre :
 
Pour i allant de 0 a 15
    val += charbuff[i] * ((2^(15-i) -1)
Fin pour
 
Deja c'est pas tres propre, donc si vous avez une methode toute faite pour gerer ça, je suis preneur ^^
 
Ensuite ce "double" doit etre convertit en valeur hexa dans un tableau de char de taille 6. Je n'ai pas trouvé d'équivalent à la fonction atoi pour les doubles, donc si vous avez une idée ou une methode je suis egalemment interressé.
 
Merci d'avance !
 
 
 
 
 
 

Reply

Marsh Posté le 03-01-2005 à 19:18:05   

Reply

Marsh Posté le 03-01-2005 à 19:19:43    

Déjà on met pas la charrue avant les boeufs, donc c'est pas "charbuff", mais "buffchar" :o  
 
[] ---->

Reply

Marsh Posté le 03-01-2005 à 19:21:30    

Reply

Marsh Posté le 03-01-2005 à 20:13:50    

Sagoth a écrit :


J'ai un buffer de char (appelons le charbuff)avec les valeurs suivantes :
'2' '3' '3' '0' '9' '8' ... bref etc jusqu'a l'indice 14.
 
Je souhaite convertir ce buffer en une valeur numerique.


Qu'est-ce qui ne va pas avec strtol(), strtoul() ou strtod() ? Evidemment, la chaine doit être valide (tableau de char terminé par un 0).


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 03-01-2005 à 22:22:40    

Oui utilises strtoll ou sscanf avec %lld. Dans un long long tu peux stocker n'importe quel nombre de 18 chiffres. Après, pour recracher de l'hexa, sprintf avec %llx.


Message édité par matafan le 03-01-2005 à 22:24:10
Reply

Marsh Posté le 04-01-2005 à 09:58:27    

Le type long long c'est un type officiel ? il ne semble pas reconnu

Reply

Marsh Posté le 04-01-2005 à 10:48:59    

strtod ca foire, il me manque un chiffre.
avecmon sscanf je n'arrive pas a gerer le type long long

Reply

Marsh Posté le 04-01-2005 à 11:04:04    

long long est C99 et supporté depuis un bout de temps par des compilateurs comme GCC.

Reply

Marsh Posté le 04-01-2005 à 11:04:12    

Sagoth a écrit :


avec mon sscanf je n'arrive pas a gerer le type long long


Il faut un compilateur qui supporte C99, comme gcc 3.x
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 04-01-2005 à 11:19:43    

donc en gros t'es sur une plateforme avec des int 64bits mais rien pour les lire ? bizarre

Reply

Marsh Posté le 04-01-2005 à 11:19:43   

Reply

Marsh Posté le 04-01-2005 à 14:40:03    

ok, c'est bien des int64 qu'il me fallait.
Si ca peut aider qqun voila le truc :
 
_var64 = _atoi64( num1 );
sprintf(num1hexa , "%I64x", __var64 );
for (iOctet=0;iOctet<MY_SIZE;iOctet++)
    buffer[iOctet] = Hexa2toUchar(noBadgeHexa,iOctet);
 
Avec une fonction Hexa2toUchar maison.
 
Merci de votre aide :)
 

Reply

Marsh Posté le 04-01-2005 à 14:44:43    

/me part vomir

Reply

Sujets relatifs:

Leave a Replay

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