Подтвердить что ты не робот

Преобразование MFC CString в целое число

Как преобразовать объект CString в целое число в MFC.

4b9b3361

Ответ 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, чтобы сделать это лучше.