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

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

Войти
Регистрация
Восстановить пароль
 
Death
4 / 4 / 1
Регистрация: 18.10.2009
Сообщений: 44
#1

Присвоение указателю на char значения int - C++

25.01.2012, 00:34. Просмотров 1042. Ответов 6
Метки нет (Все метки)

доброе время суток уважаемые пользователи

как можно присвоить int значение char *'у .int имеет размер 4 байта, и указатель на char имеет 4 байта, значит думаю можно это сделать, только не получается.

C++
1
2
3
int number = 666;
char * n = (char *)&number;
std::cout << (int) (*n);
выводит число -120.
Знаю что изменение указателя производится на столько байт, сколько в памяти занимает базовый тип. Как это победить можно?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.01.2012, 00:34     Присвоение указателю на char значения int
Посмотрите здесь:

C++ Присвоение значения фунции fopen указателю на файл
C++ std::list присвоение указателю на структуру итератора
Присвоение указателю члену класса нового адреса, ошибка компиляции C++
C++ написать, прогу которая подсчитывает макс. и мин. значения переменных (int, shorting, longint, uint, char, uchar), ещё указать размер в байтах
C++ Объявите указатели на следующие типы int, char, double - проинициализируйте их, выведите их значения на экран.
C++ Присвоение адреса указателю, равному NULL
Надо указателю на long int присвоить значение указателя на char C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alkagolik
1511 / 617 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
25.01.2012, 00:36     Присвоение указателю на char значения int #2
Death, char* беззнаковый, а int знаковый. Ерунду сказал не разобравшись. Хм... у меня segmentation fault
Death
4 / 4 / 1
Регистрация: 18.10.2009
Сообщений: 44
25.01.2012, 01:04  [ТС]     Присвоение указателю на char значения int #3
наверное не так объяснил.
расскажу польностью смысл, есть сервер и клиент, работают через tcp.
нужно послать число на сервер размером 1 байт, а сервер передаст на клиент 4 байта. соотвестнно передается сначала char, а возращается int.
Функции для передачи (send) и принятия (recv) используют char *. Вот думаю как сделать это.

массив char это же массив байт, по сути, там может храниться что угодно. Значит туда можно записать и 1 байт и 4 байта.

Добавлено через 2 минуты
Например char arrayByte [256];
можно же как-то записать в него 1 байт, останеться 255 байт свободно, и так же 4 байта (значение int ) записать. Может кто знает как это можно сделать?
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
25.01.2012, 01:08     Присвоение указателю на char значения int #4
вот ЗДЕСЬ структура,
которая может хранить в char [4] - 32 битное беззнаковое целое от 0 до максимума.
alkagolik
1511 / 617 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
25.01.2012, 01:09     Присвоение указателю на char значения int #5
на, разбирай.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
int main ()
{
    int i = 666, y = 4;
    char *x = &i;
    printf( "%p\n", x );
    printf( "%i\n", *x );
    printf( "%x\n", &i );
    printf( "%u\n", sizeof(char*) );
 
    while ( y-- )
        printf("%i\n", *x++);
    return 0;
}
alex_x_x
бжни
2443 / 1648 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
25.01.2012, 01:18     Присвоение указателю на char значения int #6
близко, но проблема не в этом
char - знаковый, первый байт у тебя 154 - он обрезается до -102

Добавлено через 45 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <cstdlib>
#include <cstring>
 
int main()
{
  typedef unsigned char byte;
  const int       number = 666;
  
  byte val [sizeof(int)];
  
  memcpy (&val, &number, sizeof(int));
  printf ("%u %u %u %u\n", val[0], val[1], val[2], val[3]);
  
  unsigned char * n = (unsigned char *)&unumber;
  std::cout << (int) (*n);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2012, 01:39     Присвоение указателю на char значения int
Еще ссылки по теме:

Шаблонные классы. Присвоение к указателю и приведение типов C++
Присвоение значения указателю C++
C++ Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ?
C++ Присвоение значения слову char
Присвоение по указателю на 32 и 64 битных машинах C++

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

Или воспользуйтесь поиском по форуму:
NoMasters
Псевдослучайный
1743 / 1086 / 71
Регистрация: 13.09.2011
Сообщений: 3,109
25.01.2012, 01:39     Присвоение указателю на char значения int #7
В общем-то в изначальном коде достаточно изменить только строку вывода на
C++
1
std::cout << *(int*)n << std::endl;
и будет работать как надо. Но в качестве обобщенного указателя уже давно введён void*...
Yandex
Объявления
25.01.2012, 01:39     Присвоение указателю на char значения int
Ответ Создать тему
Опции темы

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