Недавно начал пользоватся VC++ 6, наткнулся на эту беду.
Как используя MFC конвертировать из Cstring в int и обратно.
Из Cstring в int и обратно
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Сам задал вопрос, сам нашел и решение:
int i;
Cstring s;
i = atoi(s); // из строки в целое
s.Format("%i",i); // обратно
int i;
Cstring s;
i = atoi(s); // из строки в целое
s.Format("%i",i); // обратно
О, спасибо, я тоже как раз искал этот способ и нашел) Спс!
Тут тонкость в том, что если Cstring содержит строку, которая "не совсем число", то atoi преобразует то, "что сможет", т.е. до первого "ошибочного" символа. Если уже самый первый сивол строки - не цифровой, то результат будет 0.
Правильно такое поведение или нет - а черт его знает. Наверное, в зависимости от конкретных потребностей. Но помнить о таком поведении atoi следует.
Правильно такое поведение или нет - а черт его знает. Наверное, в зависимости от конкретных потребностей. Но помнить о таком поведении atoi следует.
Делаю так же как написано выше, но у меня всё равно выдаёт ошибку.
myprodlg.cpp(333): error C2664: atoi: невозможно преобразовать параметр 1 из "CString" в "const char *"
Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
В чём проблема я не понимаю, подскажите кто знает.
myprodlg.cpp(333): error C2664: atoi: невозможно преобразовать параметр 1 из "CString" в "const char *"
Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
В чём проблема я не понимаю, подскажите кто знает.
Код: Выделить всё
void CMyProDlg::OnBnClickedButtonBegin()
{
int u;
CString s;
u = atoi(s);
}
- Romeo
- Сообщения: 3091
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Преобразование, которые компилятор требует, как раз есть в классе CString. Если компилятор ругается, то скорее всего мы имеем дело с UNICODE проектом. Если так, то внутри CString у нас не char*, wchar_t*. В этом случае нас спасёт замена функции atoi на _wtoi.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.