Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 261, средняя оценка - 4.61
ordoss
0 / 0 / 0
Регистрация: 29.05.2010
Сообщений: 17
#1

Конвертирование char в int - C++

13.06.2010, 00:21. Просмотров 42249. Ответов 8
Метки нет (Все метки)

Перевожу char в int, но на выходе неверное число, вот упрощений вариант:
C++
1
2
3
4
5
6
7
8
#include <iostream.h>
 
main()
{
    char c = '1';
    int i = static_cast<int>(c);
    cout << i;
}
где ошибка?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.06.2010, 00:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конвертирование char в int (C++):

конвертирование (char)int (char*)int - C++
Вопрос такой каким образом можно выполнить вот такую операцию: у нас есть: int c = 12; char d = ''PS &quot;; Получиться должно...

Реализация функции char *padl(const char *string, int len, int c=' ') - C++
Реализовать функцию возвращающую указатель на новую строку длины len, полученную из string либо удалением лишних символов слева , либо...

Форматирование строк, char to int & int to char - C++
Покажите как запихнуть число в строку и вытащить его обратно из строки. Вот всё просто в pawn str_to_num(const str) // Тупо...

Как превести из char* в int и наоборот из int в char*? - C++
Как превести из char* aa='123' в int aa=123 и наоборот из int в char* . Понимаю что самому написать функцию не сложно, но наверняка это...

Подскажите пожалуйста с int main(int argc, char*argv[]) - C++
Если я правильно понимаю, то int argc это передача аргумента программе, т. е если argc&gt;1 то программе передан хотя бы один аргумент, если...

Ошибка: initializing argument 2 of `char* fgets(char*, int, FILE*) - C++
Написать программу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа Помогите...

8
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
13.06.2010, 00:34 #2
А что по-вашему должно было получиться? Что значит неверное?
0
ordoss
0 / 0 / 0
Регистрация: 29.05.2010
Сообщений: 17
13.06.2010, 00:39  [ТС] #3
rangerx, "по-моему" должно было получиться 1, так как использован static_cast, но на выходе 49
А "по-вашему"?
0
easybudda
Модератор
Эксперт CЭксперт С++
9683 / 5633 / 956
Регистрация: 25.07.2009
Сообщений: 10,811
13.06.2010, 00:47 #4
Цитата Сообщение от ordoss Посмотреть сообщение
"по-моему" должно было получиться 1, так как использован static_cast
Это с какого перепуга? static_cast в Вашем случае просто приводит переменную типа char к типу int. Значением переменной как был код символа '1', так и остался...
0
M128K145
Эксперт С++
8293 / 3513 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
13.06.2010, 00:47 #5
ordoss, а по нашему
C++
1
int i = static_cast<int>(c) - 48;
Запомните навсегда - во всех языках программирования(по крайней мере тех, с которыми я знаком) C/C++/C#/Java/J# приведение char к int дает вам ASCII код символа, а не переводит '1' в 1
4
Market
21 / 21 / 1
Регистрация: 18.03.2010
Сообщений: 19
13.06.2010, 11:41 #6
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Все напали на вас и не кто толком не объяснил.

char c = '1';

когда вы сделали присваивание в переменную 'c' записался только номер символа "1", то есть предположим так: Вы сохранили номер символа по которому windows хранит номер изображения с симвоолом "1", вы же не можете сохранить изображение в переменную char, по этому при выводе например на консоле вместо номера символа вы увидите сам символ. Надеюсь понятно.

Для перевода символа из номера кода символа есть множество функций вот например
int atoi(const char *str)

можно было написать так:
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
 
main()
{
    char c = '1';
    int i = atoi(c);
    cout << i;
}
9
Amadara
1 / 1 / 2
Регистрация: 17.12.2014
Сообщений: 161
16.01.2017, 07:25 #7
Цитата Сообщение от Market Посмотреть сообщение
Все напали на вас и не кто толком не объяснил.

char c = '1';

когда вы сделали присваивание в переменную 'c' записался только номер символа "1", то есть предположим так: Вы сохранили номер символа по которому windows хранит номер изображения с симвоолом "1", вы же не можете сохранить изображение в переменную char, по этому при выводе например на консоле вместо номера символа вы увидите сам символ. Надеюсь понятно.

Для перевода символа из номера кода символа есть множество функций вот например
int atoi(const char *str)

можно было написать так:
C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
 
main()
{
    char c = '1';
    int i = atoi(c);
    cout << i;
}

зачем было писать то что не работает и даже не должно работать?

011.cpp(8): error C2664: "int atoi(const char *)": невозможно преобразовать аргумент 1 из "char" в "const char *"

C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
 
int main()
{
    char c = '1';
    int i = atoi(c);
    std::cout << i;
    return 0;
}

C++
1
2
    int fg = static_cast<int>(hh)-'0'; //явное преобразование чар в инт
    int fg = int(hh)-'0';
но char это только один символ.
поэтому если ввести 77 останется только 7

может кто знает как приводить char к цифрам, может есть готовые функции??
0
zss
Модератор
Эксперт С++
6478 / 6041 / 1982
Регистрация: 18.12.2011
Сообщений: 15,654
Завершенные тесты: 1
16.01.2017, 08:38 #8
atoi переводит текстовое представление ЧИСЛА, в двоичное целое.
C++
1
2
3
4
5
6
7
nt main()
{
    char c[] = "1";// массив из 2 символов, первый - код единицы, второй - терминальный ноль
    int i = atoi(c);
    std::cout << i;
    return 0;
}
1
stas131
0 / 0 / 0
Регистрация: 14.08.2014
Сообщений: 6
21.07.2017, 14:04 #9
Кликните здесь для просмотра всего текста
Цитата Сообщение от Amadara Посмотреть сообщение
зачем было писать то что не работает и даже не должно работать?
011.cpp(8): error C2664: "int atoi(const char *)": невозможно преобразовать аргумент 1 из "char" в "const char *"

C++
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
int main()
{
    char c = '1';
    int i = atoi(c);
    std::cout << i;
    return 0;
}
C++
1
2
int fg = static_cast<int>(hh)-'0'; //явное преобразование чар в инт
int fg = int(hh)-'0';
но char это только один символ.
поэтому если ввести 77 останется только 7
может кто знает как приводить char к цифрам, может есть готовые функции??

Как ни странно, но вам поможет та самая функция, которую описали выше :
C++
1
int atoi(const char *str)
Если не вдаваться в подробности и не усложнять - то всё, что нужно, это создать массив char. А в вашем примере вы использовали не массив, а 'одиночную' переменную.
Если немножко переделать ваш код, то он будет работать:
C++
1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
 
int main()
{
    char c[10] = "123";
    int i = atoi(c);
    std::cout << i;
    return 0;
}
0
21.07.2017, 14:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2017, 14:04
Привет! Вот еще темы с ответами:

Сделать преобразование unsigned char в char, а затем типу int - C++
Здраствуйте, есть вопрос: Число представлено двумя полями: типа long для рублей и unsigned char - для копеек. Собственно что мне...

Конвертирование float/int to string - C++
Здравствуйте, я пишу программу на dev-c++ и мне надо конвертировать число в string.Я просто не знаю как это сделать в dev-c++. Помогите...

Конвертирование массива char в long double - C++
#include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;cstring&gt; using namespace std; class money { private: static const int...

Конвертирование константной строковой переменной в указатель на char - C++
Помогите исправить ошибку в коде #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include &lt;math.h&gt; #define PRECISION &quot;%6.2f&quot; // формат...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru