Как преобразовать объект CString в целое число в MFC.
Преобразование MFC CString в целое число
Ответ 1
Если вы используете подпрограмму TCHAR.H (неявно или явно), убедитесь, что вы используете функцию _ttoi(), чтобы она компилировалась как для Unicode, так и для компиляций ANSI.
Подробнее: https://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx
Ответ 2
Самый простой способ - использовать функцию 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
}
Ответ 3
CString s;
int i;
i = _wtoi(s); // if you use wide charater formats
i = _atoi(s); // otherwise
Ответ 4
вы также можете использовать старый добрый sscanf.
CString s;
int i;
int j = _stscanf(s, _T("%d"), &i);
if (j != 1)
{
// tranfer didn't work
}
Ответ 5
Функция A _ttoi может преобразовать CString в целое число, и могут работать как широкие char, так и ansi char. Ниже приведены детали:
CString str = _T("123");
int i = _ttoi(str);
Ответ 6
Проблема с принятым ответом заключается в том, что он не может сигнализировать о сбое. Там strtol (STRING TO Long), который может. Это часть большого семейства: wcstol (строка с широким символом TO Long, например Unicode), strtoull (TO Unsigned Long Long, 64bits +), wcstoull, strtof (TO Float) и wcstof.
Ответ 7
Определить в 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)
Ответ 8
Каноническое решение заключается в использовании стандартной библиотеки С++ для преобразования. В зависимости от желаемого типа возврата доступны следующие функции преобразования: 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() ) } );
}
Все эти реализации сообщают об ошибках через исключения (std:: invalid_argument, если преобразование не может быть выполнено, std:: out_of_range, если преобразованное значение выпадет из диапазона типа результата). Построение временного std::[w]string также может быть выполнено.
Реализации могут использоваться как для Unicode, так и для проектов MBCS.
Ответ 9
CString s="143";
int x=atoi(s);
или
CString s=_T("143");
int x=_toti(s);
atoi будет работать, если вы хотите преобразовать CString в int.
Ответ 10
Вы можете использовать функцию C atoi (в предложении try/catch, потому что преобразование не всегда возможно) Но нет ничего в классах MFC, чтобы сделать это лучше.