Stringstreams & conversions strings -> types numériques

Stringstreams & conversions strings -> types numériques - C++ - Programmation

Marsh Posté le 08-09-2004 à 11:34:02    

Bon il y a qq temps, je cherchais comment remplacer les strto* et wcsto* par quelque chose de plus propre.
Après demande a Taz, celui ci m'a parlé des stringstreams...  
A ce moment la j'ai absolument pas compris en quoi ca m'aidait, maintenant cette partie là c'est bon, mais j'ai encore un petit problème:
 

Code :
  1. stringstream foo;
  2. string bar = "10";
  3. unsigned short value;
  4. foo << bar;
  5. foo >> value;
  6. cout << "Taiste " << value << endl;


Ce code fonctionne très bien si on a un décimal dans bar, mais si on met une valeur en octal (010), il la considère comme du décimal (10 et non 8), et si on met une valeur en hexa (0xE), il ne parse que le 0 (au lieu de sortir 14).
 
Problème 1: Me faut il obligatoirement passer par les modificateur hex et oct ou y a-t-il un moyen de le faire implicitement?
 
Problème 2: Si je remplace unsigned short par unsigned char, il colle (assez logiquement) le code ascii du 1er caractère dans l'uchar au lieu d'y mettre sa valeur. Dois-je nécessairement passer par l'étape unsigned short pour placer la valeur numérique présente dans le string et non le code ascii du 1er caractère dans mon uchar?


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box, and replicate and expand beyond their wildest dreams by throwing away the limits imposed by overbearing genetic r
Reply

Marsh Posté le 08-09-2004 à 11:34:02   

Reply

Marsh Posté le 08-09-2004 à 12:41:00    

Pour le problème 1:
 
Je crois que ce code (hex, donc) :  

Code :
  1. std::istringstream iss("0x13" );
  2.    unsigned int x = 0; 
  3.    iss >> std::hex >> x;


 
Doit pouvoir être remplacé par:

Code :
  1. std::istringstream iss("0x52 034" );
  2.    iss.unsetf(std::ios::basefield);
  3.    unsigned int x = 0;
  4.    iss >> x;


 

Reply

Sujets relatifs:

Leave a Replay

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