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?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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