Из Cstring в int и обратно

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Valtron
Сообщения: 2
Зарегистрирован: 05 сен 2007, 17:14

Из Cstring в int и обратно

Сообщение Valtron » 05 сен 2007, 20:40

Недавно начал пользоватся VC++ 6, наткнулся на эту беду.
Как используя MFC конвертировать из Cstring в int и обратно.

Valtron
Сообщения: 2
Зарегистрирован: 05 сен 2007, 17:14

Re: Из Cstring в int и обратно

Сообщение Valtron » 06 сен 2007, 01:11

Сам задал вопрос, сам нашел и решение:
int i;
Cstring s;
i = atoi(s); // из строки в целое
s.Format("%i",i); // обратно

Artur_87
Сообщения: 11
Зарегистрирован: 21 фев 2011, 11:55

Re: Из Cstring в int и обратно

Сообщение Artur_87 » 27 фев 2011, 12:34

О, спасибо, я тоже как раз искал этот способ и нашел) Спс!

BBB
Сообщения: 1272
Зарегистрирован: 27 дек 2005, 13:37

Re: Из Cstring в int и обратно

Сообщение BBB » 01 мар 2011, 10:26

Тут тонкость в том, что если Cstring содержит строку, которая "не совсем число", то atoi преобразует то, "что сможет", т.е. до первого "ошибочного" символа. Если уже самый первый сивол строки - не цифровой, то результат будет 0.
Правильно такое поведение или нет - а черт его знает. Наверное, в зависимости от конкретных потребностей. Но помнить о таком поведении atoi следует.

MrCron
Сообщения: 1
Зарегистрирован: 25 авг 2013, 11:35

Re: Из Cstring в int и обратно

Сообщение MrCron » 25 авг 2013, 11:48

Делаю так же как написано выше, но у меня всё равно выдаёт ошибку.
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
Откуда: Крым, Севастополь
Контактная информация:

Re: Из Cstring в int и обратно

Сообщение Romeo » 30 сен 2013, 18:18

Преобразование, которые компилятор требует, как раз есть в классе CString. Если компилятор ругается, то скорее всего мы имеем дело с UNICODE проектом. Если так, то внутри CString у нас не char*, wchar_t*. В этом случае нас спасёт замена функции atoi на _wtoi.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.

Ответить