Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите плз, запихнуть указатель

4.8K
12 декабря 2005 года
Jump
128 / / 09.11.2005
В общем суть гемороя такова:
Есть чаровый указатель на кусок памяти

 
Код:
char *l;
...
l=(char*)GetMemory(SEND_SIZE);


Есть указатель на объект.
Нужно записать в массив l начиная с позиции 5 этот указатель. Т.е. записать сам адрес (4 байта).

И как потом это дело прочитать?
7.0K
12 декабря 2005 года
qw1
25 / / 27.07.2004
С пятой позиции не очень то хорошо. Нужно бы писать на границе двойного слова.

Значит указатель на объект напр.

CMyObj *obj;
...
...
*(int *)(l+5) = (int)obj;

Чтение

CMyObj *obj2 = (CMyObj *)*(int *)(l+5);
4.8K
12 декабря 2005 года
Jump
128 / / 09.11.2005
Цитата:
Originally posted by qw1
С пятой позиции не очень то хорошо. Нужно бы писать на границе двойного слова.

Значит указатель на объект напр.

CMyObj *obj;
...
...
*(int *)(l+5) = (int)obj;

Чтение

CMyObj *obj2 = (CMyObj *)*(int *)(l+5);



Спасибо, получилось. И позицию как надо сделал (все 1-байтовые переменные в конец переместил)

ЗЫ: Кстати заметил, что эта мега-конструкция ((CMyObj *)*(int *)) читается на тойже скорости, что и обычная переменная. Т.е. копирование этого значения в доп.переменную только снижает скорость кода, хотя и повышает его читабельность %). Вот такие пироги...

7.0K
12 декабря 2005 года
qw1
25 / / 27.07.2004
Если знаешь наперед какие переменные будут в l записаны, то можно определить структуру. Проще будет считать и записывать, и особенно проще будет делать какие-то изменения. Например ВСЕГДА пишется 2 указателя, 3 однобайтных переменных и одна строка, макс. длина 20.
Код:
Определяется где-то
struct XB
{
  CMyObj *obj1;
  CMyObj *obj2;
  byte   b1;
  byte   b2;
  byte   b3;
  char   ch[20]
};

Есть например
l char[512];
CMyObj *objA, *objB;
byte a, b, c;
char c20[20];

Тогда запись

XB *xb = (XB *)l;
xb->obj1 = objA;
xb->obj2 = objB;
xb->a    = a;
xb->b    = b;
xb->c    = c;
strcpy(xb->ch, c20);

Чтение
XB *xb = (XB *)l;
objA = xb->obj1;
objB = xb->obj2;
a = xb->a
...
4.8K
12 декабря 2005 года
Jump
128 / / 09.11.2005
!?:*№%:*:?!!!!!

Я ща застрелюсь нафик! :D И че мне самому структуру прилепить не доперло?!!!
Хотя со структурой идет малость помедленней... Хотя самую малость, фиг с ним...

Спасибо qw1!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог