|
Вопрос # 5 896/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
Моя программа принимает байты, приходящие на последовательный порт (количество байт неизвестно),
складывает их как-то и куда-то, а потом, например, при нажатии пользователем кнопки выводит их
(при нажатии кнопки гарантировано отсутствие приема).
Вопрос: как и куда правильно и быстро сложить байты и потом их вывести
(может одномерный динамический массив, но я с ним не знаком и не знаю как установить размер,
записать данные, считать, очистить).
Подскажите кому не трудно.
 |
Вопрос задал: anbaresi (статус: Посетитель)
Вопрос отправлен: 19 января 2012, 16:15
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 9; последнее сообщение — 20 января 2012, 13:48; участников в обсуждении: 3.
|
min@y™ (статус: Доктор наук), 19 января 2012, 16:18 [#1]:
TMemoryStream, однозначно!
Он предназначен именно для этого.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
anbaresi (статус: Посетитель), 20 января 2012, 09:47 [#2]:
А можно небольшой пример?
|
|
min@y™ (статус: Доктор наук), 20 января 2012, 09:51 [#3]:
Цитата (anbaresi):
А можно небольшой пример?
Пример чего?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
anbaresi (статус: Посетитель), 20 января 2012, 10:01 [#4]:
как правильно воспользоваться TMemoryStream в моем случае
|
|
min@y™ (статус: Доктор наук), 20 января 2012, 10:17 [#5]:
Цитата (anbaresi):
как правильно воспользоваться TMemoryStream в моем случае
Ну, наверное, как-то так:
// допустим, ты принимаешь данные из порта в буфер, по 64 байта
var
Buffer: array[0..63] of Byte;
Stream: TMemoryStream;
begin
Stream:= TMemoryStream.Create();
try
repeat
// <--- тут приём очередной пачки байт
// далее - запись в стрим:
Stream.WriteBuffer(Buffer, SizeOf(Buffer));
until (условие_выхода_из_цикла_приёма);
{ после цикла можно:
- читать данные Stream.Read(), Stream.ReadBuffer();
- сохранить данные в файл Stream.SaveToFile();
- передать данные в другой Stream
- и т.п. }
finally
Stream.Free();
end;
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
Толяныч (статус: 4-ый класс), 20 января 2012, 12:54 [#6]:
Я так простодушно интересуюсь : а чем плох банальный
array of byte ?
|
|
min@y™ (статус: Доктор наук), 20 января 2012, 13:02 [#7]:
Цитата (Толяныч):
Я так простодушно интересуюсь : а чем плох банальный array of byte ?
А кто сказал, что он плох?
Я написал просто пример и всё.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
|
anbaresi (статус: Посетитель), 20 января 2012, 13:36 [#8]:
Условие выхода из цикла отсутствует (только лампочка на железке, подключенной к сом порту компьютера - лампочка погасла можно нажимать кнопку в программе и смотреть что же насыпала железка). Количество байт насыпанных неизвестно, их может быть гораздо больше 64-х.
Т.е. нужно грамотно организовать накопление и вывод накопленного, ну и желательно знать кол-во накопленного на момент нажатия кнопки.
(механизм работы железка+компьютер прошу не критиковать, надо найти решение в текущей ситуации)
|
|
min@y™ (статус: Доктор наук), 20 января 2012, 13:48 [#9]:
Да я ж сказал, что это просто пример. Как ты там будешь читать данные из порта - не важно. Ты ж просил пример работы с TMemoryStream, я его написал.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|