Как перевести char в int в си
Сообщение от kaljan775
а мой пример вы не поняли, да.
А ваш пример, а точнее часть его очень даже пригодилось.
я щас разработаю код и выложу. За ранее скажу огромное спосибо за мысль и идею.
вот код программы. его можно сокротить введя функчии и указатели. но это потом.
char str_2[100]="(1203+123-345/321*3214)"; int chislo[15]; int chisel[15]; char znak[50]; int a,i,f,g;//разные счётчики. for(int i=0;i <15;i++) < chislo[i]=0; chisel[i]=0; >a=0; i=0; g=0; for(f=0;f <100;f++) < switch(str_2[f])< case '+':znak[i]=str_2[f]; for(g=0;gg=0;a=0;i++; break; case '-':znak[i]=str_2[f];for(g=0;g g=0;a=0;i++;break; case '*':znak[i]=str_2[f];for(g=0;g g=0;a=0;i++;break; case '/':znak[i]=str_2[f];for(g=0;g g=0;a=0;i++;break; case '0':chislo[g]=((static_cast( str_2[f] ))-48);g++;a++;break; case '1':chislo[g]=((static_cast( str_2[f] ))-48);g++;a++;break; case '2':chislo[g]=((static_cast( str_2[f] ))-48);g++;a++;break; case '3':chislo[g]=((static_cast( str_2[f] ))-48);g++;a++;break; case '4':chislo[g]=((static_cast( str_2[f] ))-48);g++;a++;break; case '5':chislo[g]=((static_cast( str_2[f] ))-48);g++;a++;break; case '6':chislo[g]=((static_cast( str_2[f] ))-48);g++;a++;break; case '7':chislo[g]=((static_cast( str_2[f] ))-48);g++;a++;break; case '8':chislo[g]=((static_cast( str_2[f] ))-48);g++;a++;break; case '9':chislo[g]=((static_cast( str_2[f] ))-48);g++;a++;break; case ')':znak[i]=' '; for(g=0;g break; default:break; > > for(int i=0;i
Последний раз редактировалось Stilet; 12.12.2010 в 12:55 .
Как перевести char в int?


- C++
Не могу, понять как компьютер перемещает свой знак?
- 1 подписчик
- 16 часов назад
- 74 просмотра

- C++
- +2 ещё
Почему не компилируется код C++ в VS code/Platformio?
- 1 подписчик
- 18 часов назад
- 65 просмотров

- C++
Что быстрее индексы или указатели?
- 1 подписчик
- 03 янв.
- 172 просмотра

- C#
- +4 ещё
Как реализовать движение частиц в векторном поле или сплошной среде?
- 1 подписчик
- 03 янв.
- 106 просмотров

- Windows
- +2 ещё
Как отлавливать курсор при наведении на дочернее окно?
- 1 подписчик
- 02 янв.
- 118 просмотров

- C++
Как обеспечивается совместимость динамических библиотек при ликовке в рантайме?
- 3 подписчика
- 30 дек. 2023
- 312 просмотров

- C++
Как установить библиотеку c++ если в папке lib пусто и при запуске ошибка LINK2019?
- 1 подписчик
- 29 дек. 2023
- 57 просмотров

- C++
Как лучше добавить перед структурой ещё одну и поместить в массив?
- 1 подписчик
- 29 дек. 2023
- 71 просмотр

- C++
Почему прога билдится, но не запускается?
- 1 подписчик
- 28 дек. 2023
- 97 просмотров

- C++
- +1 ещё
Какие хорошие ресурсы для изучения c++?
- 2 подписчика
- 28 дек. 2023
- 240 просмотров
Bell Integrator • Екатеринбург
До 150 000 ₽
Bell Integrator • Санкт-Петербург
До 150 000 ₽
До 150 000 ₽
08 янв. 2024, в 16:37
15000 руб./за проект
08 янв. 2024, в 16:24
1500 руб./за проект
08 янв. 2024, в 16:12
1350 руб./в час
Минуточку внимания
Присоединяйтесь к сообществу, чтобы узнавать новое и делиться знаниями
- Есть ли не официальные аналоги миджорни апи?
- 3 подписчика
- 1 ответ
- 4 подписчика
- 1 ответ
- 3 подписчика
- 0 ответов
- 3 подписчика
- 3 ответа
- 2 подписчика
- 0 ответов
- 2 подписчика
- 4 ответа
- 2 подписчика
- 3 ответа
- 2 подписчика
- 1 ответ
- 2 подписчика
- 0 ответов
- 2 подписчика
- 2 ответа
Как преобразовать массив символов char[] в int?
Посмотрите на функции atoi или более мощную strtol .
Отслеживать
ответ дан 20 мар 2021 в 18:59
219k 15 15 золотых знаков 119 119 серебряных знаков 230 230 бронзовых знаков
20 мар 2021 в 19:43@МаксимФисман Давайте уберем ссылки вообще — ответ останется полным и самодостаточным: Посмотрите на функции atoi или более мощную strtol . В данном случае ссылка — дополнение к ответу, чтобы вопросителю 🙂 было легче найти нужную информацию, а не собственно ответ.
21 мар 2021 в 4:06
Для преобразования C-строки в значение типа int есть по крайней мере следующие способы:
#include . char buffer[256] = "12345"; int val = std::atoi(buffer); coutЕсли не удалось преобразовать строку в число (пустая строка, или последовательность символов в строке не представляет число), то функция возвращает ноль.
Если строка содержит число, но оно не представимо типом int , то поведение функции не определено.#include . char buffer[256] = "12345"; int val = 0; int result = std::sscanf(buffer, "%d", &val); if (result == EOF) < //Входная строка пустая >else if (result == 0) < //Не удалось преобразовать строку в число >else
Если строка содержит число, но оно не представимо типом int , то поведение функции не определено.
#include #include #include . char buffer[256] = "12345"; char* buffer_end = nullptr; int saved_errno = errno; errno = 0; long lval = strtol(buffer, &buffer_end, 10); int cur_errno = errno; errno = saved_errno; if (buffer == buffer_end) < //Не удалось преобразовать строку в число >else if (cur_errno != 0) < //Переполнение при преобразовании в число >else if (lval < std::numeric_limits::min() || lval > std::numeric_limits::max()) < //Переполнение при преобразовании в число >else < int val = static_cast(lval); cout
- std::string + функция std::stoi() .
#include #include . char buffer[256] = "12345"; try < int val = std::stoi(std::string(buffer)); cout catch (const std::invalid_argument& e) < //Не удалось преобразовать строку в число >catch (const std::out_of_range& e) < //Переполнение при преобразовании в число >#include . char buffer[256] = "12345"; int val = 0; std::stringstream stream; stream > val; if (stream.fail()) < //Либо не удалось преобразовать строку в число //Либо переполнение при преобразовании в число >else
- Функция std::from_chars()
#include #include #include . char buffer[256] = "12345"; int val = 0; auto res = std::from_chars(buffer, buffer + std::strlen(buffer), val); if (res.ec == static_cast(0)) < cout else if (res.ec == std::errc::invalid_argument) < //Не удалось преобразовать строку в число >else if (res.ec == std::errc::result_out_of_range) < //Переполнение при преобразовании в число >std::from_chars() — единственная из представленных функций, на которую не влияют текущие глобальные локали. Но в отличие от других способов, данная функция не игнорирует ведущие пробельные символы в строке. Также неотрицательные числа не могут начинаться с символа + .
Developing.ru
На Win32 тип int имеет размер 4 байта, а char - 1 байт. Таким образом "честное" преобразование int в char невозможно. Возможно лишь преобразование с усечением (truncation). Самое распространенное усечение - это отбрасование старших байт. Как это сделать продемонстировал IceFlame.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.dmitry1208197320 Сообщения: 16 Зарегистрирован: 13 янв 2010, 17:48
Спасибо за ответ!
eqltv Сообщения: 6 Зарегистрирован: 05 фев 2010, 14:22
IceFlame писал(а): Ну, например,int a; char b; b = (char) a;Это язык си, а вопрос был про C++. В плюсах лучше писать так:
b = char(a);или еще лучше (понятнее)
b = static_cast(a);dmitry1208197320 Сообщения: 16 Зарегистрирован: 13 янв 2010, 17:48
спасибо, учту
BulldozerBSG Сообщения: 263 Зарегистрирован: 09 янв 2010, 04:14 Контактная информация:
eqltv писал(а): Это язык си, а вопрос был про C++. В плюсах лучше писать так:b = char(a);или еще лучше (понятнее)
b = static_cast(a);А не одна ли малина, или компилятор код разный генерирует?
Romeo Сообщения: 3091 Зарегистрирован: 02 мар 2004, 17:25 Откуда: Крым, Севастополь Контактная информация:
BulldozerBSG, ну если начинать говорить о С++ преобразованиях типов, то это целая отдельная и очень интересная тема со своей собственной философией. Можем обсудить все тонкости, если хочешь. или если кто-нибудь из посетителей хочет
Будет ли сгенерирован другой код? Для static_cast не будет. Однако static_cast более безопасен, так как помимо преобразования как такового, на этапе компиляции он дополнительно осуществляет валидацию правильности преобразования. Любой тип скастить в либой тип с помощью static_cast нельзя: в случае несоответствия будет выдана ошибка компиляции.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.GeorgeSoca Сообщения: 0 Зарегистрирован: 12 окт 2015, 04:09 Откуда: Guam Контактная информация:
На нашем сайте вы можете чувствовать себя в безопасности! Кроме того, мы используем зеркальные жесткие диски на все наши серверы, поэтому мы также взять резервную два раза в день на отдельных серверах. Мы используем ISPmanager, как на панели управления. ISPmanager является панель управления, которая позволяет легко управлять своей веб-сайт. С нами вы можете разместить столько веб-сайты и домены, которые вы хотите для учетной записи хостинга.
virtual hosting9 сообщений • Страница 1 из 1
- Системное и прикладное программирование
- ↳ Win API, Shell..
- ↳ C и C++
- ↳ Delphi и Pascal
- ↳ Программирование на Pascal и Delphi (Object Pascal)
- ↳ Все вопросы ООП
- ↳ Компоненты в Delphi
- ↳ Delphi и WinAPI, ActiveX и OLE , COM и DCOM, и т.д
- ↳ Java
- ↳ MS Office и VB(A).
- ↳ Ассемблер
- WEB программирование
- ↳ JScript, VBScript, DHTML.
- ↳ Perl, PHP, ASP .
- Некатегоризированное
- ↳ Вопрошайка
- ↳ SQL
- ↳ Алгоритмы
- ↳ Дизайн и графика
- Администрирование
- ↳ Apache, IIS.
- ↳ Операционные системы
- Работа
- ↳ Вакансии и заказы для программистов
- ↳ Поиск работы и заказов.
- ↳ Решите мне задачку
- ↳ задачи на Паскале и Delphi
- ↳ задачи на C и C++
- ↳ задачи на Basic и Visual Basic (VB)
- Прочее
- ↳ Жалобная книга
- ↳ Флейм.