Преобразовать MFC CString в целое число - PullRequest
40 голосов
/ 14 июня 2009

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

Ответы [ 10 ]

39 голосов
/ 24 июня 2010

Если вы используете подпрограмму TCHAR.H (неявно или явно), убедитесь, что вы используете функцию _ttoi(), чтобы она компилировалась как для Unicode, так и для ANSI.

Подробнее: https://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx

34 голосов
/ 14 июня 2009

Самый простой подход - использовать функцию 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
}
15 голосов
/ 14 июня 2009
CString s;
int i;
i = _wtoi(s); // if you use wide charater formats
i = _atoi(s); // otherwise
9 голосов
/ 08 июня 2015
Функция

A _ttoi может конвертировать CString в целое число, может работать как широкий символ, так и тип ANSI. Ниже приведены детали:

CString str = _T("123");
int i = _ttoi(str);
8 голосов
/ 17 июня 2009

вы также можете использовать старый добрый sscanf.

CString s;
int i;
int j = _stscanf(s, _T("%d"), &i);
if (j != 1)
{
   // tranfer didn't work
}
3 голосов
/ 01 сентября 2017
CString s="143";
int x=atoi(s);

или

CString s=_T("143");
int x=_toti(s);

atoi будет работать, если вы хотите конвертировать CString в int.

3 голосов
/ 01 апреля 2015

Проблема с принятым ответом заключается в том, что он не может сигнализировать об ошибке. Есть strtol (STRING TO Long), который может. Это часть большого семейства: wcstol (строка широких символов TO Long, например, Unicode), strtoull (TO Unsigned Long Long, 64бит +), wcstoull, strtof (TO Float) и wcstof.

2 голосов
/ 25 октября 2016

Каноническим решением является использование стандартной библиотеки C ++ для преобразования. В зависимости от требуемого типа возвращаемого значения доступны следующие функции преобразования: 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.

1 голос
/ 24 июня 2015

Определить в 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)
0 голосов
/ 29 декабря 2012

Вы можете использовать функцию C atoi (в предложении try / catch, потому что преобразование не всегда возможно) Но в классах MFC нет ничего, что могло бы сделать это лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...