![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Числа в памяти
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