Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Числа в памяти   Найти похожие ветки 

 
Barbariska   (2010-03-20 20:03) [0]

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

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

пробую так:

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

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

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

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

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

спасибо!


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


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


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


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

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

var buff: PFooRecord ;


 
DVM ©   (2010-03-20 23:01) [3]


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

Move


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

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

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

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

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


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


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


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


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

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

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

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

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


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


> Barbariska   (20.03.10 23:35) [4]

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


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


>  pointer(buff)

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


> buff^

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


> @buff

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


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


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

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


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

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


 
Anatoly Podgoretsky ©   (2010-03-21 09:56) [11]


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

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



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.047 c
11-1215697287
KOLBOSS
2008-07-10 17:41
2010.08.27
как добавить страницу в RichEdit


2-1274423388
pro_xaoc
2010-05-21 10:29
2010.08.27
Какой код лучше?


15-1269034206
Юрий
2010-03-20 00:30
2010.08.27
С днем рождения ! 20 марта 2010 суббота


15-1275078583
Юрий
2010-05-29 00:29
2010.08.27
С днем рождения ! 29 мая 2010 суббота


15-1270153801
Юрий
2010-04-02 00:30
2010.08.27
С днем рождения ! 2 апреля 2010 пятница