Cómo convertir un objeto CString
a entero en MFC.Convertir MFC CString a entero
Respuesta
El enfoque más simple es utilizar la función atoi()
encontrado en stdlib.h
:
CString s = "123";
int x = atoi(s);
Sin embargo, esto no trata bien con el caso en el que la cadena no contiene un entero válido, en cuyo caso se 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
}
CString s;
int i;
i = _wtoi(s); // if you use wide charater formats
i = _atoi(s); // otherwise
Tienes que hacer algo con los valores de retorno de esas funciones para que este código sea útil. –
Sí, por supuesto, es correcto. – PaV
también puedes utilizar el buen sscanf de edad.
CString s;
int i;
int j = _stscanf(s, _T("%d"), &i);
if (j != 1)
{
// tranfer didn't work
}
Si está utilizando TCHAR.H
rutina (implícita o explícitamente), asegúrese de usar _ttoi()
función, por lo que se compila para ambas compilaciones Unicode y ANSI.
Más detalles: https://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx
puede usar la función C atoi (en un bloque try/catch porque la conversión no siempre es posible) pero no hay nada en las clases MFC de hacerlo mejor.
Bienvenido a stackoverflow. Puede que tengas razón, pero parece que [ya se mencionó en 2009] (http://stackoverflow.com/a/992775/104223). (Cuando tenga suficiente reputación, puede agregar comentarios a las respuestas existentes) – Leigh
atoi no genera excepciones –
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 a largo, por ejemplo Unicode), strtoull
(A largo sin firmar, 64bits +), wcstoull
, strtof
(Float TO) y wcstof
.
Una función _ttoi
puede convertir CString
en número entero, tanto el carácter de char ancho como el de carácter ansi pueden funcionar. A continuación se muestra los detalles:
CString str = _T("123");
int i = _ttoi(str);
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 cadena es wchar_t. Por lo tanto, si desea convertir cCadena a int, puede utilizar:
CString s;
int test = _wtoi(s)
'CString' depende de los símbolos del preprocesador' _UNICODE' y '_MBCS'. Puede almacenar una cadena Unicode codificada en UTF-16, una cadena de caracteres DBCS o una cadena ASCII. Sugerir que siempre sea una cadena Unicode es simplemente incorrecto, lo siento. – IInspectable
La solución canónica es utilizar la biblioteca C++ estándar para la conversión. Según el tipo de devolución deseado, están disponibles las siguientes funciones de conversión: std::stoi, std::stol, or std::stoll (o sus contrapartes sin firmar std::stoul, std::stoull).
La aplicación es bastante sencillo:
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 reportar errores mediante excepciones (std::invalid_argument si no hay conversión podría realizarse, std::out_of_range Si el valor convertido caerían fuera del rango del tipo de resultado) La construcción del temporal std::[w]string
también puede arrojar.
Las implementaciones se pueden usar tanto para proyectos Unicode como MBCS.
CString s="143";
int x=atoi(s);
o
CString s=_T("143");
int x=_toti(s);
atoi
funcionará, si se desea convertir a CString
int
.
- 1. Convertir CString para flotar en mfc
- 2. Convertir CString en const char *
- 3. Convertir CString a std :: wstring
- 4. Cómo convertir nsstring a cString?
- 5. UTF-8, CString y CFile? (C++, MFC)
- 6. CString a conversión LPCTSTR
- 7. CString a char *
- 8. Cómo convertir a entero int
- 9. Convertir valores RGB a Entero
- 10. Cómo convertir entero a int?
- 11. Java: Convertir bytes a entero
- 12. Haskell Convertir entero a int?
- 13. Entero convertir a WoW Gold
- 14. ¿Cómo puedo convertir un int a un CString?
- 15. ¿Convierte CString en matriz de caracteres?
- 16. C++ CString equivalente en C#
- 17. PostgreSQL: ¿Es posible convertir enum a entero?
- 18. ¿Convertir cadena a entero/flotar en Haskell?
- 19. Rails ¿Migración para convertir cadena a entero?
- 20. Convertir la columna de bit a entero
- 21. ¿Convertir variable de punto flotante a entero?
- 22. Convertir cadena a entero en XSLT 1.0
- 23. Cómo convertir cadena a entero en UNIX
- 24. Convertir entero a una representación de bits
- 25. cadena Convertir a entero en el mapa()
- 26. convertir float a entero en prolog
- 27. ¿Cómo convertir IPv4 a Entero usando CoffeScript?
- 28. Convertir el nombre del mes a entero
- 29. Cómo convertir un entero a serial
- 30. Convertir Boole a entero en VB.NET
tropezó aquí porque el compilador dice: "atoi: no se puede convertir CString a const char *"; entonces descubrí que tu respuesta no funciona si es un proyecto unicode, _ttoi es mejor como lo señala Unagi – Zac
error C2664: 'atoi': no se puede convertir el parámetro 1 de 'CString' a 'const char *' – maamaa