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

Вниз

Прочитать из "массива" в "массив"   Найти похожие ветки 

 
ZipFolder   (2006-08-26 16:42) [0]

Есть такой код:
 PZPkt = ^TZPkt;
 TZPkt = record
   Data: array[0..1024] of Byte;
   Len: Word;
 end;

var
  z1, z2: PZPkt;



z1 -- заполнен заранее, z1.Len - это показатель на сколько прочитан пакет (т.е когда мы читаем из него где-то, и увеличиваем Len на столько-же на сколько прочитали).

z2 -- пока пустой пакет.

Необходимо прочитать из z1, в z2 необходимое количество. Вопрос: покажите, как это корректно и хорошо сделать. А то я сделаю, как всегда через одно известное место...
Спасибо!


 
Джо ©   (2006-08-26 16:58) [1]

Move


 
ZipFolder   (2006-08-26 17:31) [2]

А можно ближе к мой ситуации? Я сам пробовал различные манипуляции с Move, но видимо дурак от природы, маловато знаю. Даже если чего и добьюсь - то это будет заведомо не оптимально, поэтому и прошу помощи. Спасибо!


 
Джо ©   (2006-08-26 17:41) [3]

Move (z1^.Data,z2^.Data,z1^.Len);
z2^.Len := z1^.Len;


 
ZipFolder   (2006-08-26 17:59) [4]

Я напишу все же свой ход мыслей.

Допустим У нас в z1, находится 50 байт. z1.Len -- изначально установлен в 0.
Мы читаем где-то из z1, например 10 байт, и увеличиваем z1.Len на прочитанное (т.е.) 10 байт.

Потом нам приспичило с текущей позиции (z1.Len) отправить 20 байт в z2.
Так будет нормально? Не хочет что-то. Сейчас изучаю отладчиком...

function MovePkt2Pkt(Pkt: PZPkt; Size: Word): TZPkt;
begin
 Move (Pkt^.Data, Result.Data, Size);
 Inc(Pkt^.Len, Size);
 Result.Len := 0;
end;


 
Джо ©   (2006-08-26 18:08) [5]

Честно скажу, мало что понял в вопросе. Точнее, почему поле Len (сокр. длина) хранит " это показатель на сколько прочитан пакет". В общем, скажу, раз ветка в "Начинающих", что Move копирует указанное кол-во байт из одной области памяти в другую. Приспосабливайте ее, как знаете :)


 
default ©   (2006-08-26 18:24) [6]

может так?
function MovePkt2Pkt(Pkt: PZPkt; Size: Word): TZPkt;
begin
Move (Pkt^.Data[Pkt^.Len], Result.Data, Size);
Inc(Pkt^.Len, Size);
Result.Len := 0;
end;

а если серьёзно, то ЯВНО надо не так делать...скорее всего лучше сделать всё stream-о подобными классами, быть может взяв за базовый TStream или как-то ещё, но через классы


 
ZipFolder   (2006-08-26 18:24) [7]

Я наверное запутал не слишком нужными фактами. Поэтому, переформирую вопрос в немного другое русло, может быть понятнее получиться.

Мне нужно считать из в z2.Data, из z1.Data, с началом в z1.Len, нужное количество Size.

т.е. например задано
Size = 6;
z1.Data = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
z1.Len = 4;
Move(z1,... z2...)
В z2, должно получиться: (5, 6, 7, 8, 9, 10)

Сделал так, работает, но может быть есть вариант лучше?
Move (Pkt^.Data[Pkt^.Len], Result.Data, Size);



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

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

Наверх





Память: 0.46 MB
Время: 0.077 c
8-1141204700
Sour Smile
2006-03-01 12:18
2006.09.17
Как проиграть несколько звуков одновременно?


15-1156183703
Layner
2006-08-21 22:08
2006.09.17
Сканер штрихкода не читает мои штрихкоды..


4-1143902115
Ibrohimbek
2006-04-01 18:35
2006.09.17
как можно изменит рисунок меню пуск в XP


15-1156396900
Александр Иванов
2006-08-24 09:21
2006.09.17
MS SQL Server 2005 Express Edition


15-1156258192
pasha_golub
2006-08-22 18:49
2006.09.17
Или лыжи не едут, или что-то не так





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