将MFC CString转换为整数

时间:2009-06-14 12:42:39

标签: visual-c++ mfc

如何在MFC中将CString对象转换为整数。

11 个答案:

答案 0 :(得分:39)

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

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

答案 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课程中没有什么可以做得更好。