如何在MFC中将CString
对象转换为整数。
答案 0 :(得分:39)
如果您正在使用TCHAR.H
例程(隐式或显式),请确保使用_ttoi()
函数,以便编译Unicode和ANSI编译。
答案 1 :(得分:34)
最简单的方法是使用atoi()
中的stdlib.h
函数:
CString s = "123";
int x = atoi( s );
但是,这不适用于字符串不包含有效整数的情况,在这种情况下,您应该调查strtol()
函数:
CString s = "12zzz"; // bad integer
char * p;
int x = strtol ( s, & p, 10 );
if ( * p != 0 ) {
// s does not contain an integer
}
答案 2 :(得分:15)
CString s;
int i;
i = _wtoi(s); // if you use wide charater formats
i = _atoi(s); // otherwise
答案 3 :(得分:9)
_ttoi
函数可以将CString
转换为整数,宽字符和ansi字符都可以工作。以下是详细信息:
CString str = _T("123");
int i = _ttoi(str);
答案 4 :(得分:8)
你也可以使用好的旧sscanf。
CString s;
int i;
int j = _stscanf(s, _T("%d"), &i);
if (j != 1)
{
// tranfer didn't work
}
答案 5 :(得分:3)
接受答案的问题是它不能发出失败信号。有strtol
(STRING TO Long)可以。它是更大系列的一部分:wcstol
(宽字符串TO Long,例如Unicode),strtoull
(TO无符号长,64位+),wcstoull
,{{1 (TO Float)和strtof
。
答案 6 :(得分:3)
CString s="143";
int x=atoi(s);
或
CString s=_T("143");
int x=_toti(s);
如果您想将atoi
转换为CString
, int
将有效。
答案 7 :(得分:2)
规范解决方案是使用C ++标准库进行转换。根据所需的返回类型,可以使用以下转换函数:std::stoi, std::stol, or 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() ) } );
}
所有这些实现都会通过异常报告错误(std::invalid_argument如果无法执行转换,std::out_of_range如果转换后的值超出结果类型的范围)。构建临时std::[w]string
也可以抛出。
这些实现既可以用于Unicode,也可以用于MBCS项目。
答案 8 :(得分:1)
在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_t字符串。因此,如果要将Cstring转换为int,可以使用:
CString s;
int test = _wtoi(s)
答案 9 :(得分:0)
我编写了一个从字符串中提取数字的函数:
CString str = _T("digit:1, number:102");
int digit = GetNumberFromCString(str, _T("digit:"), 1);
int number = GetNumberFromCString(str, _T("number:"), 3);
用法:
{{1}}
答案 10 :(得分:-2)
您可以使用C atoi函数(在try / catch子句中,因为转换并不总是可行) 但是在MFC课程中没有什么可以做得更好。