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

Вниз

работа с памятью   Найти похожие ветки 

 
Andrey_ka   (2008-11-10 17:24) [0]

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


 
Palladin ©   (2008-11-10 17:27) [1]


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

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


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


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


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


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


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


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

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


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

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


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

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


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


> Andrey_ka   (10.11.08 17:37) [5]

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


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

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


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

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

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


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

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


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

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


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

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

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


 
Anatoly Podgoretsky ©   (2008-11-10 20:15) [12]


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

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


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


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


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


 
Anatoly Podgoretsky ©   (2008-11-10 20:32) [14]

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

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


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

ответа всего 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;



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.12.21;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.052 c
15-1224039909
МемТест
2008-10-15 07:05
2008.12.21
Как использовать второе ядро двухъядерного процессора?


2-1226698357
Артем
2008-11-15 00:32
2008.12.21
NET SEND в Делфи с переменными


3-1211879613
Dmitry_177
2008-05-27 13:13
2008.12.21
ADO API определить количество записей


1-1204908815
Воронтсов
2008-03-07 19:53
2008.12.21
работа с TOpenDialog


2-1226208105
Maksim
2008-11-09 08:21
2008.12.21
Как в поле memo1 вставить картинку?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский