Как преобразовать объект CString
в целое число в MFC.Преобразование MFC CString в целое число
ответ
Самый простой подход заключается в использовании функции 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
}
CString s;
int i;
i = _wtoi(s); // if you use wide charater formats
i = _atoi(s); // otherwise
Вам нужно сделать что-то с возвращаемыми значениями этих функций для этого кода. – 2009-06-14 14:09:41
Да, вы, конечно, правы. – PaV
вы также можете использовать старый добрый sscanf.
CString s;
int i;
int j = _stscanf(s, _T("%d"), &i);
if (j != 1)
{
// tranfer didn't work
}
Если вы используете TCHAR.H
рутины (неявно или явно), убедитесь, что вы используете _ttoi()
функцию, так что он компилирует для обоего Unicode и ANSI сборников.
Подробнее: https://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx
Вы можете использовать функцию C atoi (в предложении Try/поймать, потому что преобразование не всегда возможно) Но нет ничего в классах MFC, чтобы сделать это лучше.
Добро пожаловать в stackoverflow. Возможно, вы правы, но похоже, что это было упомянуто еще в 2009 году (http://stackoverflow.com/a/992775/104223). (Когда у вас есть достаточная репутация, вы можете добавлять комментарии к существующим ответам) – Leigh
atoi не создает исключений –
Проблема с принятым ответом заключается в том, что он не может сигнализировать о сбое. Есть strtol
(STRING TO Long), который может. Это часть более крупного семейства: wcstol
(Широкая символьная строка до длинного, например, Юникод), strtoull
(К Unsigned Long Long, 64 бит +), wcstoull
, strtof
(TO Float) и wcstof
.
A _ttoi
функция может преобразовывать CString
в целое число, как широкий char, так и ansi char может работать. Ниже детали:
CString str = _T("123");
int i = _ttoi(str);
Определить в 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 в целое, вы можете использовать:
CString s;
int test = _wtoi(s)
'CString' зависит от символов препроцессора' _UNICODE' и '_MBCS'. Он может хранить кодировку Unicode, кодированную UTF-16, строку символов DBCS или строку ASCII. Предположение, что всегда будет строкой Unicode, просто неправильно, извините. – IInspectable
каноническое решение использовать ++ Standard Library 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.
CString s="143";
int x=atoi(s);
или
CString s=_T("143");
int x=_toti(s);
atoi
будет работать, если вы хотите конвертировать CString
в int
.
- 1. Преобразование строк в целое в MFC
- 2. Преобразование [Целое] -> Целое число
- 3. Преобразование символа в его целое целое число?
- 4. Преобразование CString в массив символов?
- 5. Преобразование Request.QueryString в целое число
- 6. Преобразование строки в целое число
- 7. Преобразование вектора в целое число
- 8. Преобразование строки в целое число
- 9. Преобразование поплавка в целое число
- 10. Преобразование десятичного в целое число
- 11. Преобразование строки в целое число?
- 12. преобразование строки в целое число
- 13. Логическое преобразование в целое число
- 14. Преобразование коэффициента в целое число
- 15. Преобразование строки в целое число?
- 16. Преобразование строки в целое число
- 17. Преобразование строки в целое число
- 18. Преобразование CGPDFPageRef в целое число
- 19. Преобразование varchar в целое число
- 20. Преобразование CString в const char *
- 21. Преобразование строки в целое число (число)
- 22. Преобразование long double в CString
- 23. Преобразование строки C# в MFC CString в проекте C#?
- 24. Преобразование CString в тип Enum в MFC (VC++)?
- 25. Преобразование широкого CString в char *
- 26. Многобайтовая CString для Unicode MFC
- 27. Visual Studio MFC Cstring format
- 28. mfc копировать определенные разделы CString
- 29. C++ MFC double to CString
- 30. MFC CString: double не отображается
споткнулся здесь, потому что компилятор говорит: «atoi: невозможно преобразовать CString в const char *"; то я обнаружил, что ваш ответ не работает, если он является проектом юникода, _ttoi лучше, как указано Unagi – Zac
ошибка C2664: 'atoi': не может преобразовать параметр 1 из 'CString' в 'const char *' – maamaa