2011-09-08 5 views
5

Comment puis-je transférer la valeur uint64_t à std :: string? J'ai besoin pour construire la std :: string contenant cette valeur Par exemple quelque chose comme ceci:Convertir uint64_t en std :: string

void genString(uint64_t val) 
{ 
     std::string str; 
     //.....some code for str 
     str+=(unsigned int)val;//???? 
} 

Merci

+0

Sous Windows (MSVC), vous pouvez utilisez le '% I64d' spécificateur de format lors de l'utilisation de 'std :: sprintf' –

+2

@Jonas - étant donné que c'est clairement C++, je vous conseille fortement de rester bien à l'écart de' sprintf', en particulier avec des extensions non portables. – Flexo

Répondre

8

utilisation soit boost::lexical_cast ou std::ostringstream

par exemple:

str += boost::lexical_cast<std::string>(val); 

ou

std::ostringstream o; 
o << val; 
str += o.str(); 
+0

Pouvez-vous me donner l'exemple de code comment utiliser std :: ostringstream? – Yakov

+0

@yakov - exemples ajoutés pour les deux. Vous aurez besoin de '#include ' ou '#include ' selon la solution que vous utilisez. – Flexo

+0

Downvoted depuis maintenant, la solution standard C++ 11 devrait être utilisée - std :: to_string. – Liosan

0
string genString(uint64_t val) 
{ 
    char temp[21]; 
    sprintf(temp, "%z", val); 
    return temp; 
} 
+0

Pour quiconque peut l'utiliser dans le futur, assurez-vous de rendre votre tampon assez grand. De plus, vous pourriez rendre ce tampon 'static' si vous vouliez ajouter un peu plus d'efficacité. –

+1

@Seth - est statique (et donc pas réentrant) vraiment plus rapide que de changer l'augmentation du pointeur de pile en entrant la fonction de 'n' à' n + 21'? – Flexo

+0

@awoodland Oui pour les applications à un seul thread. –

3

J'utilise quelque chose comme ce code ci-dessous. Parce que c'est un modèle, il fonctionnera avec n'importe quel type que l'opérateur supporte < < à un flux.

#include <sstream> 

template <typename T> 
std::string tostring(const T& t) 
{ 
    std::ostringstream ss; 
    ss << t; 
    return ss.str(); 
} 

par exemple

uint64_t data = 123; 
std::string mystring = tostring(data); 
Questions connexes