Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.198 c
15-1264338698
Андрей Миронов
2010-01-24 16:11
2010.08.27
Поясните работу с множествами


2-1270199599
AlexCAHEK
2010-04-02 13:13
2010.08.27
TImage


2-1271353531
Мурад Севзиханов
2010-04-15 21:45
2010.08.27
найдите пожалуйста ошибку


2-1272537853
12
2010-04-29 14:44
2010.08.27
WNetAddConnection2. В чем могут быть проблемы?


2-1267552320
HRustBB
2010-03-02 20:52
2010.08.27
Виртуальный диск с источником FTP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский