visual studio significa que microsoft libreria juvenil catolico aplicacion visual-c++ mfc

visual c++ - studio - Convertir MFC CString a entero



microsoft excel (10)

Cómo convertir un objeto CString a entero en MFC.


Definir en msdn: https://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx

int atoi( const char *str ); int _wtoi( const wchar_t *str ); int _atoi_l( const char *str, _locale_t locale ); int _wtoi_l( const wchar_t *str, _locale_t locale );

CString es wchar_t cadena. Entonces, si quieres convertir Cstring a int, puedes usar:

CString s; int test = _wtoi(s)


El enfoque más simple es usar la función atoi() que se encuentra en stdlib.h :

CString s = "123"; int x = atoi( s );

Sin embargo, esto no funciona bien con el caso donde la cadena no contiene un entero válido, en cuyo caso debe investigar la función strtol() :

CString s = "12zzz"; // bad integer char * p; int x = strtol ( s, & p, 10 ); if ( * p != 0 ) { // s does not contain an integer }


El problema con la respuesta aceptada es que no puede indicar una falla. Hay strtol (STRING TO Long) que puede. Es parte de una familia más grande: wcstol (Cadena de caracteres anchos TO Long, por ej. Unicode), strtoull (TO Unsigned Long Long, 64bits +), wcstoull , strtof (TO Float) y wcstof .


La solución canónica es usar la biblioteca estándar de C ++ para la conversión. Dependiendo del tipo de devolución deseado, están disponibles las siguientes funciones de conversión: std :: stoi, std :: stol, o std :: stoll (o sus contrapartes no firmadas std :: stoul, std :: stoull ).

La implementación es bastante directa:

int ToInt( const CString& str ) { return std::stoi( { str.GetString(), static_cast<size_t>( str.GetLength() ) } ); } long ToLong( const CString& str ) { return std::stol( { str.GetString(), static_cast<size_t>( str.GetLength() ) } ); } long long ToLongLong( const CString& str ) { return std::stoll( { str.GetString(), static_cast<size_t>( str.GetLength() ) } ); } unsigned long ToULong( const CString& str ) { return std::stoul( { str.GetString(), static_cast<size_t>( str.GetLength() ) } ); } unsigned long long ToULongLong( const CString& str ) { return std::stoull( { str.GetString(), static_cast<size_t>( str.GetLength() ) } ); }

Todas estas implementaciones informan errores a través de excepciones ( std::invalid_argument si no se puede realizar la conversión, std::out_of_range si el valor convertido caería fuera del rango del tipo de resultado). La construcción de la std::[w]string temporal también puede arrojar.

Las implementaciones se pueden usar tanto para proyectos Unicode como MBCS.


Puede usar la función C atoi (en una cláusula try / catch porque la conversión no siempre es posible) Pero no hay nada en las clases de MFC que lo haga mejor.



Una función _ttoi puede convertir CString a entero, tanto el char ancho como el ansi char pueden funcionar. A continuación están los detalles:

CString str = _T("123"); int i = _ttoi(str);


también puedes usar el viejo sscanf.

CString s; int i; int j = _stscanf(s, _T("%d"), &i); if (j != 1) { // tranfer didn''t work }


CString s; int i; i = _wtoi(s); // if you use wide charater formats i = _atoi(s); // otherwise


CString s="143"; int x=atoi(s);

o

CString s=_T("143"); int x=_toti(s);

atoi funcionará, si quiere convertir CString a int .