Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.044 c
15-1273756585
oldman
2010-05-13 17:16
2010.08.27
Визитная карточка Samsung - оружие самурая...


10-1165502198
YCH.Del
2006-12-07 17:36
2010.08.27
Excel, реализовать в Delphi VB шный оператор Set


15-1268649323
Из батника
2010-03-15 13:35
2010.08.27
Удаление каталога


15-1269950611
AlexDan
2010-03-30 16:03
2010.08.27
Зона ru и паспорт


11-1212343554
Сашик
2008-06-01 22:05
2010.08.27
OleVariant и OleObject в KOL Delphi 4




   Наверх