2009-08-10 8 views
14

J'ai une chaîne existante std :: string et un int. Je voudrais ajouter l'int à la chaîne, mais sous une forme lisible par l'homme (notation hexadécimale), plutôt que dans un charabia binaire.Comment puis-je ajouter des données à une chaîne std :: string au format hexadécimal?

Normalement, je venais d'utiliser printf, mais je ne peux pas faire cela avec un std :: string (puis-je?)

Toutes les suggestions quant à la façon de le faire?

Example: 
Given: 
    std::string - "Your Id Number is: " 
    int - 0xdeadc0de 
Output: 
    std::string - "Your Id Number is: 0xdeadc0de" 

Répondre

30

Utilisez un flux de chaînes. Vous pouvez l'utiliser comme n'importe quel autre flux de sortie, de sorte que vous pouvez également y insérer std::hex. Puis extraire c'est stringstream::str() fonction.

std::stringstream ss; 
ss << "your id is " << std::hex << 0x0daffa0; 
const std::string s = ss.str(); 
+5

std :: ShowBase doit être utilisé en plus de std :: hex pour correspondre exactement à l'exigence de l'OP de préfixer la représentation int « 0x » –

5

Miser sur la réponse de xtofl, l'en-tête que vous cherchez est <iomanip>. C'est où std::hex, std::dec, et std::oct vivent, qui peuvent tous être dirigés dans les flux de sorte que tout ce qui est envoyé dans le flux après leur est converti en cette base.

0

Je crois que la chaîne 'forward' déclare uniquement std :: stringstream. Donc, vous devez également inclure:

#include <sstream> 
Questions connexes