将MFC CString转换为整数
如何将一个CString
对象转换为MFC中的整数。
如果使用TCHAR.H
例程(隐式或显式),请确保使用_ttoi()
函数,以便编译Unicode和ANSI编译。
更多详细信息: https : //msdn.microsoft.com/en-us/library/yd5xkb5c.aspx
最简单的方法是使用stdlib.h
的atoi()
函数:
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 +), wcstoull
, strtof
(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类没有任何东西可以做得更好。