将MFC CString转换为整数

如何将一个CString对象转换为MFC中的整数。

如果使用TCHAR.H例程(隐式或显式),请确保使用_ttoi()函数,以便编译Unicode和ANSI编译。

更多详细信息: https : //msdn.microsoft.com/en-us/library/yd5xkb5c.aspx

最简单的方法是使用stdlib.hatoi()函数:

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

但是,这不能很好地处理string不包含有效整数的情况,在这种情况下,您应该研究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 

你也可以使用旧的sscanf。

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

_ttoi函数可以将CString转换为整数,宽字符和ansi字符都可以工作。 以下是详细信息:

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

接受答案的问题是它不能表示失败。 有strtol (STRING TO Long)可以。 它是一个更大的家族的一部分: wcstol (宽string长,例如Unicode), strtoull (TO无符号长long,64bits +), wcstoullstrtof (TO浮点)和wcstof

在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是wchar_tstring。 所以,如果你想把Cstring转换成int,你可以使用:

  CString s; int test = _wtoi(s) 

规范的解决scheme是使用C ++标准库进行转换。 根据所需的返回types,可以使用以下转换函数: std :: stoi,std :: stol或std :: stoll (或者它们的无符号对应的std :: stoul,std :: stoull )。

实施相当简单:

 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() ) } ); } 

所有这些实现都通过exception来报告错误(如果不能执行转换, std :: invalid_argument;如果转换后的值不在结果types的范围内, std :: out_of_range )。 构造临时std::[w]string也可以抛出。

这些实现既可以用于Unicode也可以用于MBCS项目。

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

要么

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

atoi将工作,如果你想将CString转换为int

您可以使用C atoi函数(在try / catch子句中,因为转换不总是可能的)。但MFC类没有任何东西可以做得更好。