2008-11-19 26 views
9

Estoy usando VS 2008 para crear un proyecto de DLL C++ (no administrado) y necesito convertir un char * en un tipo largo. ¿Hay una manera fácil de hacerlo?cadena de conversión a long long

Gracias de antemano :)

+0

parece que esta cuestión aparece cada semana más o menos: - | –

Respuesta

5

Trate _atoi64. Esto toma char* y devuelve __int64.

+1

Atención al comprador: ¡atoi no es seguro ni ofrece comprobación de límites! – Alan

+0

Sí, _atoi64 probablemente no sea una buena opción. Si está utilizando .NET Framework, ¿por qué no usar ToInt64 en una cadena en lugar de un char *? Si no, creo que strtol o equiv es la forma estándar actual de ir y es más seguro que atoi. –

+0

boost :: lexical_Cast <> –

15

La forma más sencilla es utilizar el std :: stringstream (que es también el más typesafe ...)

std::stringstream sstr(mystr); 
__int64 val; 
sstr >> val; 

Es posible que necesite para apuntar una aplicación de 64 bits para que esto funcione.

C++ FAQ

+0

Debe usar 'std :: int64_t' en lugar de la extensión de lenguaje MSVC' __int64'. –

+0

No creo que std :: int64_t esté disponible en VC++ 2008 – Alan

+0

Ah, tienes razón. Mi error. –

7

Si está utilizando impulso, lexical_cast es el camino a seguir, en mi opinión.

long long ll = boost::lexical_cast<long long>(mystr) 
1

Otra opción es usar stoll() que se encuentra dentro de la biblioteca de cadenas. Toma una cadena de C++.

long long ll = std::stoll(mystr); 

Docs