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.
Si está utilizando la rutina TCHAR.H
(implícita o explícitamente), asegúrese de utilizar la función _ttoi()
, de modo que compila para las compilaciones Unicode y ANSI.
Más detalles: https://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx
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
.