2011-09-08 26 views
5

Jak mogę przenieść wartość uint64_t do std :: string? muszę skonstruować std :: string zawierający tę wartość Na przykład coś takiego:Konwersja uint64_t na std :: string

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

dziękuję

+0

Na Windows (MSVC) można użyj '% I64d' specyfikator formatu podczas używania 'std :: sprintf' –

+2

@ Jonas - biorąc pod uwagę, że jest to wyraźnie C++, zdecydowanie radzę trzymać się z dala od' sprintf', szczególnie w przypadku niemobilnych rozszerzeń. – Flexo

Odpowiedz

8

użyć jednej boost::lexical_cast lub std::ostringstream

np

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

lub

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

Czy możesz podać przykładowy kod jak używać std :: ostringstream? – Yakov

+0

@yakov - dodano przykłady dla obu. Będziesz potrzebował albo '#include ' lub '#include ' w zależności od używanego rozwiązania. – Flexo

+0

Dorwane od teraz, należy użyć standardowego rozwiązania C++ 11 - std :: to_string. – Liosan

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

Do każdego, kto może to wykorzystać w przyszłości, upewnij się, że twój bufor jest wystarczająco duży. Możesz również zrobić ten bufor 'statyczny', jeśli chcesz dodać trochę więcej wydajności. –

+1

@Seth - jest statyczny (a więc nie reentrant) naprawdę szybszy niż zmiana wskaźnika stosu przy wejściu do funkcji od 'n' do' n + 21'? – Flexo

+0

@awoodland yes for single threaded apps. –

3

Używam czegoś podobnego do tego kodu poniżej. Ponieważ jest to szablon, będzie działał z dowolnym typem operatora wspierającego < < do strumienia.

#include <sstream> 

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

np

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