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

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

Войти
Регистрация
Восстановить пароль
 
jen941
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 69
#1

Записать число в ячейку char - C++

02.04.2013, 22:07. Просмотров 950. Ответов 14
Метки нет (Все метки)

Здравствуйте.
Столкнулся со странной проблемой.

Нужно в ячейку str[0] записать некоторое число int.

Такой код работает:
C
1
2
char str[128];
str[0]=123;
А такой - не работает:
C
1
2
3
char str[128];
int I=123;
str[0]=I;
Почему? Как в ячейку char записать значение из переменной?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2013, 22:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Записать число в ячейку char (C++):

Разбить число на цифры, каждую цифру записать в ячейку массива - C++
Пользователь задает число N с консоли. Программа разбивает полученное число на цифры, получает реверс числа и распечатывает полученный...

Как записать 16ричное число в char - C++
Всем доброго времени суток! Столкнулся с такой проблемой: мне нужно создать строку из 16ричных байтов. Проблема состоит в следующим: как...

Как в выделенную память записать поочередно число int, массив char[n], и еще число int - C++
Выделяю память void* Start=malloc(Size); Как туда записать поочередно число int, массив char, и еще число int?

Перемещение массива типа char в соседнюю ячейку - C++
name , club и nation типа char. На них выдает ошибку. Нарыл в интернете, что в си так делать нельзя, но не нашел как можно. ...

Как char записать в структуры? - C++
#include <conio.h> #include <iostream> #include <string> #include <fstream> using namespace std; //string buff; const int N =...

Как объединить 2 char и записать в string - C++
Как объединить 2 char и записать в string в файле находится строчка вида 012345 Все переменные принимаются правильно, как я понимаю...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
02.04.2013, 22:24 #2
А какую ошибку пишет?
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
02.04.2013, 22:28 #3
C++
1
2
3
char str[128];
int I=123;
str[0]=char(I);
jen941
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 69
02.04.2013, 22:31  [ТС] #4
C
1
2
3
char str[128];
int I=123;
str[0]=I;
Ошибок не выдает, просто записывает в ячейку значение -38.

Добавлено через 2 минуты
Цитата Сообщение от SERUYBKR Посмотреть сообщение
C++
1
2
3
char str[128];
int I=123;
str[0]=char(I);
Ошибка 3: error C2059: синтаксическая ошибка: тип
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
02.04.2013, 22:33 #5
jen941, а чего ты ожидаешь? int это же не char.
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
02.04.2013, 22:36 #6
C++
1
str[0]=char(I);
Так тоже работает, преобразование из int в char - стандартное, с возможной потерей данных
jen941
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 69
02.04.2013, 22:36  [ТС] #7
Смысл в том, что нужно положить в ячейку число.
Можно же записать его туда строкой:
C
1
str[0]=123;
А с переменной так не работает.
ViktorKozlov, возможно, у нас разные компиляторы, но это нужно сделать именно в VS2010...
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
02.04.2013, 22:41 #8
Странно.. У меня на VS 2008 все работает
jen941
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 69
02.04.2013, 22:43  [ТС] #9
Понял ошибку, нужно было написать
C
1
str[0]=(char)(I);
Но все равно записывается -38
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
02.04.2013, 22:43 #10
C++
1
itoa()
ViktorKozlov
133 / 125 / 2
Регистрация: 13.12.2012
Сообщений: 293
02.04.2013, 22:45 #11
Цитата Сообщение от jen941 Посмотреть сообщение
Но все равно записывается -38
А как вы это проверяете?
palva
2609 / 1831 / 262
Регистрация: 08.06.2007
Сообщений: 6,989
Записей в блоге: 4
02.04.2013, 22:50 #12
char это по сути восьмибитный int. Его диапазон -128...127.
Можно объявить unsigned char, это восьмибитный unsigned int с диапазоном 0..255.
Если записывать туда большее число, то запишется младший бит, но компилятор, обычно, выдает предупреждение. По сути это переполнение разрядной сетки. Чтобы в char образовалось число -38 туда достаточно записать 218.

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
#include <stdio.h>
void main()
{
    char c;
    c=218;
    printf("%d'n",c); // -38
}
xSCJx
22 / 19 / 1
Регистрация: 24.12.2012
Сообщений: 435
02.04.2013, 22:53 #13
C++
1
2
3
4
5
6
char str[128];
int I=123;
 
itoa(I, str, 10);
 
std::cout << str[0] << str[1] << str[2] << std::endl;
Croessmah
02.04.2013, 22:55
  #14

Не по теме:

itoa() - не стандартная функция.

jen941
1 / 1 / 0
Регистрация: 19.12.2012
Сообщений: 69
02.04.2013, 23:03  [ТС] #15
Разобрался, нужно использовать тип unsigned char.
Всем спасибо за помощь
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.04.2013, 23:03
Привет! Вот еще темы с ответами:

Как записать Short в два char'a? - C++
Есть переменная типа short необходимо записать ее в чаровский массив... как то там через указатели как я хз((((

Как записать char массив в конструкторе - C++
Подскажите, как записать char масив в кострукторе #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class RIELTER ...

Как записать значение типа double в char? - C++
Есть массив double massiv_str; Проверяем его и если 1,2 или 3 присваиваем соответствующее значение переменной s_out, кот орую будем потом...

Как записать и прочитать int (4 byte) из char[] - C++
Buffer.h #ifndef BUFFER_CPP_H #define BUFFER_CPP_H #include &lt;vector&gt; template &lt;class T&gt; class Buffer { ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
02.04.2013, 23:03
Ответ Создать тему
Опции темы

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