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

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

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

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

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

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

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

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

Присвоение значения указателю - C++
Как можно, вот так, присваивать указателю значение? Разве, указатель не должен всегда содержать адрес? const char* szString =...

Присвоение значения фунции fopen указателю на файл - C++
В &quot;простом&quot; компиляторе C++ я бы записал так: FILE * f; if ( f=fopen(file_name, &quot;r&quot;) == 0) //проверка на существование файла {бла...

Надо указателю на long int присвоить значение указателя на char - C++
//есть указатель unsigned char* p_to_char = somthing; //и указатель unsigned long int* p_to_int; //надо p_to_int присвоить...

Присвоение значения слову char - C++
char word; char c; char b; cout &lt;&lt; &quot;Сообщение: Один&quot; &lt;&lt; endl; c = (char)_getch(); if((c == 'y' || c == 'Y')) { ...

Реализация функции 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) // Тупо...

6
alkagolik
Заблокирован
25.01.2012, 00:36 #2
Death, char* беззнаковый, а int знаковый. Ерунду сказал не разобравшись. Хм... у меня segmentation fault
0
Death
4 / 4 / 1
Регистрация: 18.10.2009
Сообщений: 44
25.01.2012, 01:04  [ТС] #3
наверное не так объяснил.
расскажу польностью смысл, есть сервер и клиент, работают через tcp.
нужно послать число на сервер размером 1 байт, а сервер передаст на клиент 4 байта. соотвестнно передается сначала char, а возращается int.
Функции для передачи (send) и принятия (recv) используют char *. Вот думаю как сделать это.

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

Добавлено через 2 минуты
Например char arrayByte [256];
можно же как-то записать в него 1 байт, останеться 255 байт свободно, и так же 4 байта (значение int ) записать. Может кто знает как это можно сделать?
0
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
25.01.2012, 01:08 #4
вот ЗДЕСЬ структура,
которая может хранить в char [4] - 32 битное беззнаковое целое от 0 до максимума.
1
alkagolik
Заблокирован
25.01.2012, 01:09 #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;
}
1
alex_x_x
бжни
2451 / 1656 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
25.01.2012, 01:18 #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);
}
1
NoMasters
Псевдослучайный
1899 / 1110 / 74
Регистрация: 13.09.2011
Сообщений: 3,158
25.01.2012, 01:39 #7
В общем-то в изначальном коде достаточно изменить только строку вывода на
C++
1
std::cout << *(int*)n << std::endl;
и будет работать как надо. Но в качестве обобщенного указателя уже давно введён void*...
0
25.01.2012, 01:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.01.2012, 01:39
Привет! Вот еще темы с ответами:

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

Присвоение по указателю на 32 и 64 битных машинах - C++
Добрый день. Скомпилированная программа на 64-битной машине аварийно завершается. Скомпилированная на 32-битной корректно работает. ...

Присвоение адреса указателю, равному NULL - C++
В конструкторе класса я присваиваю адрес переменной укзаателю,который равен был инициализирован NULL Dictionary(string DictName) { ...

Объявите указатели на следующие типы int, char, double - проинициализируйте их, выведите их значения на экран. - C++
Инициализация указателей. Объявите указатели на следующие типы int, char, double - проинициализируйте их, выведите их значения на экран. ...


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

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

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