Вниз
Скачать: 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.048 c
2-1268475991
Fr
2010-03-13 13:26
2010.08.27
Сохранение TChart


2-1267877887
girichev
2010-03-06 15:18
2010.08.27
Загрузка изображения из Resources


2-1271956369
Сергей
2010-04-22 21:12
2010.08.27
Нужна помошь (незнаю как описать)


15-1271686611
БарЛог
2010-04-19 18:16
2010.08.27
А как будет по-английки...


2-1267479305
worldmen
2010-03-02 00:35
2010.08.27
Turbo Pascal 7. Использование BlockWrite, BlockRead




   Наверх