Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

работа с памятью [D7, XP]


Andrey_ka ©   (2008-11-10 17:24:00) 

Удалено модератором
Примечание: СПАМ


Andrey_ka   (2008-11-12 14:18:00) [1]

ответа всего 2 остальное пустой треп....

ни один из ответов полностью модернизировать под цели не смог, а цели такие:
нужны 3 процедуры или функции

первая процедура на подобии move записывает  из одного
участка памяти в другой определенное количество байт
procedure CopyBytes(ps,pd:pointer;size:byte);
begin
move(ps^,pd^,size);
end;
она вроди работает коректно

вторая возвращает строку со значением каждого байта (через запяту)
Function BufInStr( const Source; count : Integer;Rozdel:char = ','):string;
var
 S: PChar;
 I: Integer;
begin
 S := PChar(@Source);
 result:='';
   for I :=0 to count-1 do
   result:=result+Rozdel+inttostr(ord(S[I]));
 delete(result,1,1);
end;

и третья обратная второй
Function StrInBuf(s:string;Dest:pointer;Rozdel:char = ','):boolean;
var
 b: PChar;
 I: Integer;
 ch:char;
 s1:string;
begin
b := Dest;
result:=false;
while length(s)>0 do
begin
s1:=copy(s,1,pos(rozdel,s)-1);
delete(s,1,length(s1)+1);
ch:=chr(StrToInt(s1));
b[i]:=ch;
inc(i);
end;
result:=true;
end;

а вот с другими двумя проблема
пока в качестве параметров передаем числа вроди работает, но вот если
передаем элемент масива, то вторая функция бред выводит:(
помогите плз!

procedure TForm1.Button1Click(Sender: TObject);
var i:longint;
t:cardinal;
b:array of byte;
begin
t:=StrToInt(e1.text);
Label1.Caption:=BufInStr(t,4);
setlength(b,4);
BufInbuf(t,@b[0],4);
label2.Caption:='';
for i:=0to length(b)-1 do
label2.Caption:=label2.Caption+inttostr(b[i]);
BufInbuf(b[0],@i,4);
Label3.Caption:=inttostr(i);
caption:=BufInStr(b,4);
i:=0;
StrInBuf(Label1.Caption+',',@i);
Label4.Caption:=inttostr(i);
StrInBuf(Label1.Caption+',',@b[0]);
label5.Caption:='';
for i:=0to length(b)-1 do
label5.Caption:=label5.Caption+inttostr(b[i]);
ShowMessage(BufInStr(b,4));
end;


Anatoly Podgoretsky   (2008-11-10 20:32:00) [2]

> Сергей М.  (10.11.2008 20:24:13)  [13]

Но выбор первичен, неправильный выбор никакой повар/доктор не исправит.


Сергей М.   (2008-11-10 20:24:00) [3]


> Anatoly Podgoretsky ©   (10.11.08 20:13) [11]


Мало использовать правильные грибы - их еще надо и правильно использовать !
Иначе не вставит)


Anatoly Podgoretsky   (2008-11-10 20:15:00) [4]


> palva ©   (10.11.08 20:01) [10]

Он стандартный и определен фирмой Интел и он простой, математически строгий - младшие байты по младшим адресам. С ним просто работать, в отличии от обратного порядка.


Anatoly Podgoretsky   (2008-11-10 20:13:00) [5]

> Сергей М.  (10.11.2008 20:01:09)  [9]

Что бы вставило надо правильные грибы использовать.


Сергей М.   (2008-11-10 20:01:00) [6]

Вот и нашу Сашу (с) тоже "не вставляет" то что не вставляет)


palva   (2008-11-10 20:01:00) [7]

Да еще не раскрыт вопрос о порядке байтов в типе Integer. В конференции для начинающих на это невредно обратить внимание.


Riply   (2008-11-10 19:51:00) [8]

> [6] Palladin ©   (10.11.08 17:44)
> уже целых два ответа дали... первый красивше

Неа. На топиковый вопрос не дали ни одного,
ибо они не "вставляют" а записывают :)


Andrey_ka   (2008-11-10 17:49:00) [9]

сори не замеил! спасибо


Palladin   (2008-11-10 17:44:00) [10]


> Andrey_ka   (10.11.08 17:37) [5]

уже целых два ответа дали... первый красивше


Andrey_ka   (2008-11-10 17:37:00) [11]

тип Integer состоит из 4 байт , вот я и хочу чтобы в масив были записаны эти байты. Если 1 переменная  проблем нет, move справляется, а как вставить не сначала а с 5 байта ну или 8, неважно


Поросенок Винни-Пух   (2008-11-10 17:35:00) [12]

var pb : PByte;
begin
pb := адрес массива;
inc(pb,смещение_пятого_от_начала);
Move(source,pb^,4);


Сергей М.   (2008-11-10 17:33:00) [13]


> move, но она вставляет


Меня тоже не "вставляет" move(), меня "вставляет" вставлялка попроще и поочевидней:

PInteger(@MyArray[5])^ := i;


Сергей М.   (2008-11-10 17:31:00) [14]


> нужно вставить


Что значит "вставить" ?


Palladin   (2008-11-10 17:27:00) [15]


> но она вставляет только сначала масива

то есть это move виновата?


Наверх

Титульная страница Поиск, карта сайта Написать письмо