Вниз
Скачать: 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.086 c
2-1272987071
User
2010-05-04 19:31
2010.08.27
Удаление тегов в MP3-файле


15-1264628812
Алексей111
2010-01-28 00:46
2010.08.27
пуассоновский поток


3-1239892608
Сантропе
2009-04-16 18:36
2010.08.27
Подскажите утилиту для работы с PARADOX


15-1273548240
Учащийся
2010-05-11 07:24
2010.08.27
Схемы хранения матриц.


2-1272851119
Delphist2
2010-05-03 05:45
2010.08.27
присваивание обработчика




   Наверх