Come convertire un oggetto CString
in numero intero in MFC.Converti MFC CString in intero
risposta
L'approccio più semplice è quello di utilizzare la funzione atoi()
trovata in stdlib.h
:
CString s = "123";
int x = atoi(s);
Tuttavia, questo non tratta bene con il caso in cui la stringa non contiene un intero valido, nel qual caso si dovrebbe indagare la funzione 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
È necessario fare qualcosa con i valori di ritorno di quelle funzioni per questo codice per essere utile. –
Sì, sei ovviamente corretto. – PaV
è anche possibile utilizzare il buon vecchio sscanf.
CString s;
int i;
int j = _stscanf(s, _T("%d"), &i);
if (j != 1)
{
// tranfer didn't work
}
Se si utilizza TCHAR.H
di routine (implicitamente o esplicitamente), essere sicuri di utilizzare _ttoi()
funzione, in modo che si compila per entrambe le compilation Unicode e ANSI.
Maggiori dettagli: https://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx
è possibile utilizzare la funzione C atoi (in una clausola try/catch perché la conversione non è sempre possibile) ma non c'è nulla nelle classi MFC per farlo meglio.
Benvenuti in StackOverflow. Potresti avere ragione, ma sembra che [sia stato menzionato già nel 2009] (http://stackoverflow.com/a/992775/104223). (Quando si dispone di una reputazione sufficiente, è possibile aggiungere commenti alle risposte esistenti) – Leigh
atoi non genera eccezioni –
Il problema con la risposta accettata è che non può segnalare un errore. C'è strtol
(STRING TO Long) che può. Fa parte di una famiglia più grande: wcstol
(Stringa di caratteri ampia TO Long, ad esempio Unicode), strtoull
(A non più lunga lunga, 64 bit +), wcstoull
, strtof
(TO Float) e wcstof
.
Una funzione _ttoi
in grado di convertire CString
in numero intero, sia char esteso che ansi char può funzionare. Di seguito il dettaglio:
CString str = _T("123");
int i = _ttoi(str);
Definire in 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 è stringa wchar_t. Quindi, se si desidera convertire Cstring a int, è possibile utilizzare:
CString s;
int test = _wtoi(s)
'CString' dipende dai simboli del preprocessore' _UNICODE' e '_MBCS'. Potrebbe memorizzare una stringa Unicode con codifica UTF-16, una stringa di caratteri DBCS o una stringa ASCII. Suggerire che sarebbe sempre una stringa Unicode è solo sbagliato, mi dispiace. – IInspectable
La soluzione canonica è quella di utilizzare la libreria standard C++ per la conversione. A seconda del tipo di reso desiderato, sono disponibili le seguenti funzioni di conversione: std::stoi, std::stol, or std::stoll (o le loro controparti non firmate std::stoul, std::stoull).
L'implementazione è abbastanza semplice:
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()) });
}
Tutte queste implementazioni segnalare errori tramite eccezioni (std::invalid_argument se nessuna conversione potrebbe essere eseguita, std::out_of_range se il valore convertito sarebbe caduta fuori dal range del tipo di risultato). Costruire il provvisorio std::[w]string
può anche lanciare.
Le implementazioni possono essere utilizzate sia per progetti Unicode che per progetti MBCS.
CString s="143";
int x=atoi(s);
o
CString s=_T("143");
int x=_toti(s);
atoi
funzionerà, se si desidera convertire CString
a int
.
- 1. Converti CString in const char *
- 2. Funzionalità divisa per MFC Cstring Class
- 3. UTF-8, CString e CFile? (C++, MFC)
- 4. C++ CString equivalente in C#
- 5. Converti fattore in intero
- 6. Converti numero intero in stringa
- 7. Java: Converti byte in intero
- 8. Haskell Converti intero in Int?
- 9. Converti stringa a intero
- 10. converti stringa in intero in C++
- 11. Converti float in intero in Rust
- 12. Converti numero intero in doppio in MIPS
- 13. Converti numero intero di serie
- 14. Python - Converti nome mese in intero
- 15. Converti booleano per intero in elisir
- 16. Converti numero stringa in numero intero
- 17. SSE: converti numero intero short in float
- 18. Converti valore intero in indirizzo IP
- 19. Converti 2 byte in un numero intero
- 20. Converti valore di colore intero in RGB
- 21. groovy converti stringa "1,503" in numero intero
- 22. Converti numero intero [] in int [] array
- 23. Come convertire nsstring in cString?
- 24. BeanUtils.copyProperties converti Numero intero nullo a 0
- 25. Converti/Quantizza intervallo float su intero Intervallo
- 26. stringa Converti numero intero usando la mappa()
- 27. MFC del browser cartella IFileOpenDialog
- 28. Converti Data corrente come numero intero
- 29. Converti stringa in intero/virgola mobile in Haskell?
- 30. Converti variabile in virgola mobile in numero intero?
è inciampato qui perché il compilatore dice: "atoi: impossibile convertire CString in const char *"; poi ho scoperto che la tua risposta non funziona se si tratta di un progetto unicode, _ttoi è migliore come sottolineato da Unagi – Zac
errore C2664: 'atoi': impossibile convertire il parametro 1 da 'CString' a 'const char *' – maamaa