Как преобразовать объект 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, чтобы сделать это лучше.