Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Числа в памяти


Barbariska ©   (2010-03-20 20:03:00) 

объясните пожалуйста новичку, никак не могу понять,
есть buff: PChar, со второго байта там Dword число (320)
0000.40010000.0000

X объявил как Dword;
хочу в X занести Dword с памяти со второго байта..

пробую так:

X:= DWord((buff + 2)^);

в X получается заносится только первый байт $40

начал долго перебирать все что знаю, получилось занести таким выражением:

X:= DWord(pointer(buff + 2)^);

не могли бы пояснить как правильно присвоить переменной число из памяти, и если не сложно, в двух словах объясните что значит ^ и pointer..

спасибо!


Anatoly Podgoretsky   (2010-03-21 09:56:00) [1]


> то что значит pointer(buff),  buff^  и  @buff

Нетипизированый указатель, разименование, типизированый указатель


Barbariska   (2010-03-21 02:08:00) [2]

большое спасибо!,
после чтения книжек на практике вроде бы разобрался..


Германн   (2010-03-21 01:27:00) [3]


> Barbariska   (21.03.10 00:45) [6]
>
> понял, спасибо!
>
> если можно, подскажите ещё, что бы в конец разобораться,
>  если
>
> buff: PAnsiChar, как понимаю указатель на кусок памяти,
>
> то что значит pointer(buff),  buff^  и  @buff
>

Без чтения книжек очень трудно понять.


DVM   (2010-03-21 00:58:00) [4]


>  pointer(buff)

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


> buff^

данные на которые указывает указатель


> @buff

адрес переменной buff, в твоем случае адрес указателя


DVM   (2010-03-21 00:55:00) [5]


> Barbariska   (20.03.10 23:35) [4]

Ты не забыл, что сначала идет младший байт числа потом старший?


Barbariska   (2010-03-21 00:45:00) [6]

понял, спасибо!

если можно, подскажите ещё, что бы в конец разобораться, если

buff: PAnsiChar, как понимаю указатель на кусок памяти,

то что значит pointer(buff),  buff^  и  @buff


Вася   (2010-03-21 00:00:00) [7]


> есть готовый буфер, объявленный как PAnsiChar


Его можно переобъявить как угодно, любым типом указателя


Barbariska   (2010-03-20 23:35:00) [8]

Спасибо за ответы! но дело в том, что есть готовый буфер, объявленный как PAnsiChar. Из него нужно вытаскивать разные числа.

DVM © , спасибо за указание данной процедурки, но как передать ей параметр

 Move( pointer(buff+2)^ , x, 4)  ?

тогда почти то же самое..


DVM   (2010-03-20 23:01:00) [9]


> присвоить переменной число из памяти

Move


Вася   (2010-03-20 22:52:00) [10]

Но вообще лучше объявлять структуры, и работать с ними
type
 PFooRecord = ^TFooRecord;
 TFooRecord = packed record
  X1: Char;
  X2: DWord;
...
 end;

var buff: PFooRecord ;


Вася   (2010-03-20 22:46:00) [11]


> X:= DWord((buff + 2)^);
>


buff -  PChar, следовательно buff^ - Char, один байт (для версий Delphi до 2007 включительно)
Можно объявить buff как указатель сразу на Dword
только надо при этом помнить, что (buff + 1) в этом случае будет увеличивать значение на 4


Наверх

Титульная страница Поиск, карта сайта Написать письмо