Probleme de conversion en hexa.

Probleme de conversion en hexa. - C++ - Programmation

Marsh Posté le 14-09-2005 à 17:09:14    

Salut tout le monde,
je suis entrain de developper une application sous VC++ 6.0, j ai eu le besoin de retouver le code hexa de toute une chaine de caractere (caractere par caractere: la chaine "0123" devient "30313233" par exemple),
j ai pensé a faire sprintf (Output,"%x",Ma_Chaine) , mais voila ça ne marche pas en fait si je fais: sprintf (Output,"%x","a" ) ou bien sprintf (Output,"%x","z" ), le resultat est le meme :??:  , je retrouve dans ma chaine:4154e4; et ce pour n importe quelle carcactere que je veux transformer!!!!
Bon je vous demanderai juste si vous avez une idée pour convertir ça, si pour la meme occasion vous avez une explication ....
merci d'avance.

Reply

Marsh Posté le 14-09-2005 à 17:09:14   

Reply

Marsh Posté le 14-09-2005 à 17:15:09    

là tu passes en parametre une chaine, donc un pointeur !!

Reply

Marsh Posté le 14-09-2005 à 17:18:15    

Code :
  1. extern char* output; /* alloué */
  2. char ch[] = "ma chaine blablabla";
  3. char* c = ch;
  4. size_t n = 0;
  5. while (*c)
  6. {
  7.    n += sprintf(output+n, "%x", *c++); 
  8. }


 
en supposant output assez grand


Message édité par jesus_christ le 14-09-2005 à 17:20:05
Reply

Marsh Posté le 14-09-2005 à 17:23:40    

Thanks Jesus!!

Reply

Marsh Posté le 14-09-2005 à 20:31:14    

c'est du C ça. et du C buggé
 
 

Code :
  1. #include <string>
  2. #include <sstream>
  3. namespace
  4. {
  5.   std::string
  6.   hexify(const std::string &s)
  7.   {
  8.     std::ostringstream out;
  9.     out << std::hex;
  10.     for (std::string::size_type i = 0; i != s.size(); ++i)
  11.       out << unsigned(s[i]);
  12.     return out.str();
  13.   }
  14. }
  15. #include <iostream>
  16. #include <string>
  17. int main()
  18. {
  19.   std::string line;
  20.   while (std::getline(std::cin, line))
  21.     std::cout << hexify(line) << '\n';
  22. }


 
c'est tellement plus simple.

Reply

Marsh Posté le 14-09-2005 à 20:39:48    

tu peux rajouter ça
 

Code :
  1. out.width(2);
  2.     out.fill('0')

pour avoir une écriture plus sympa.
 
boost::format pour ceux qui ont sinon

Reply

Marsh Posté le 14-09-2005 à 20:54:22    

taz : oui c'est du c mais comme il était partir sur un sprintf...
et il est où le bug, à part les possible problème de output (trop petit ou output[0] != 0).


Message édité par jesus_christ le 14-09-2005 à 21:18:49
Reply

Sujets relatifs:

Leave a Replay

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