2011-09-08 19 views
5

¿Cómo puedo transferir el valor de uint64_t a std :: string? necesito para construir el std :: string que contiene este valor Por ejemplo algo como esto:Convierte uint64_t en std :: string

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

Gracias

+0

En Windows (MSVC) que pueda usa el '% I64d' especificador de formato cuando se usa 'std :: sprintf' –

+2

@Jonas - dado que esto es claramente C++, le recomiendo mantenerse alejado de' sprintf', especialmente con extensiones no portátiles. – Flexo

Respuesta

8

uso ya sea boost::lexical_cast o std::ostringstream

por ejemplo:

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

o

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

¿Puede darme el ejemplo de código de cómo usar std :: ostringstream? – Yakov

+0

@yakov - ejemplos agregados para ambos. Necesitarás '#include ' o '#include ' según la solución que uses. – Flexo

+0

Votación abajo desde ahora, la solución estándar de C++ 11 se debe utilizar - std :: to_string. – Liosan

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

Para quien pueda usar esto en el futuro, asegúrese de que su memoria intermedia sea lo suficientemente grande. También podría hacer que ese búfer sea "estático" si quisiera agregar un poco más de eficiencia. –

+1

@Seth - ¿Es estático (y por lo tanto no reentrante) realmente más rápido que cambiar el aumento del puntero de pila al ingresar la función de 'n' a' n + 21'? – Flexo

+0

@awoodland sí para aplicaciones de subproceso único. –

3

Utilizo algo como este código a continuación. Debido a que es una plantilla, funcionará con cualquier tipo, el operador admite < < en una secuencia.

#include <sstream> 

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

por ejemplo

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