Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.74/285: Рейтинг темы: голосов - 285, средняя оценка - 4.74
ordoss
0 / 0 / 0
Регистрация: 29.05.2010
Сообщений: 17
1

Конвертирование char в int

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

Перевожу 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 (char*)int
Вопрос такой каким образом можно выполнить вот такую операцию: у нас есть: ...

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

Как превести из char* в int и наоборот из int в char*?
Как превести из char* aa='123' в int aa=123 и наоборот из int в char* ....

Форматирование строк, char to int & int to char
Покажите как запихнуть число в строку и вытащить его обратно из строки. Вот...

Подскажите пожалуйста с int main(int argc, char*argv[])
Если я правильно понимаю, то int argc это передача аргумента программе, т. е...

9
rangerx
1942 / 1551 / 478
Регистрация: 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Эксперт С++
10105 / 6014 / 1507
Регистрация: 25.07.2009
Сообщений: 11,402
13.06.2010, 00:47 4
Цитата Сообщение от ordoss Посмотреть сообщение
"по-моему" должно было получиться 1, так как использован static_cast
Это с какого перепуга? static_cast в Вашем случае просто приводит переменную типа char к типу int. Значением переменной как был код символа '1', так и остался...
0
M128K145
Эксперт JavaЭксперт С++
8326 / 3547 / 420
Регистрация: 03.07.2009
Сообщений: 10,708
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
10 / 10 / 5
Регистрация: 17.12.2014
Сообщений: 254
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
Модератор
Эксперт С++
7188 / 6682 / 4231
Регистрация: 18.12.2011
Сообщений: 17,635
Завершенные тесты: 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
Сообщений: 11
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
Nikomnid
5 / 5 / 6
Регистрация: 10.01.2015
Сообщений: 33
15.12.2017, 12:47 10
Пишу сюда так как это первая попавшаяся тема
char не char* и т.д
в одну строку
C++
1
2
3
4
5
6
7
#include <iostream>
#include <string>
using namespace std;
void main()
{
cout<<atoi(string({ (char)'5' }).c_str());
}
0
15.12.2017, 12:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.12.2017, 12:47

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

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

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


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

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

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