![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
устройство возвращает через com порт данные. Как хранить? [D5, Win2k, WinXP]
Zilog © (2004-11-11 15:19:00)устройство возвращает через com порт данные.
если пихнуть их в стринг - глючит, т.к. данные самые разные, и начинает прыгать длина стринга (если попадается ноль).
предложите pls, как правильно обработать эти данные?
jack128 (2004-11-12 03:56:00) [1]Длинной строкой как буффером для нетипизированных данных пользоваться можно и может даже нужно. Очень удобно + гарантированное отсутствие мемликов..
Владислав © (11.11.04 17:54) [6]
PByte(Cardinal(Pointer(MyString)) + ByteNumberN)^.
byte(MyString[ByteNumberN]) ??? ;-)
Германн (2004-11-12 03:15:00) [2]2 Zilog © (11.11.04 15:19)
Если некое устройство "возвращает через com порт данные", то либо вы должны знать, что это за данные, и запоминать их в соответствуюших структурах. Либо сохраняйте эти данные в Hex - формате в текстовый файл (или в бинарный файл - просто байты данных). Потом можно будет разобраться, может быть.
А для начала, учтите mike-d © (11.11.04 22:10) [7]
Только про FIFO не читайте. Достаточно array[0..4095] of Byte;
mike-d (2004-11-11 22:10:00) [3]вообще-то для этого используется достаточно длинный (4096 например) буфер байтов, работающий по принципу FIFO.
Есть неплохие библиотеки на sourceforge.net - Turbopower Systools - исходники открыты. Тексты хорошо оформлены и документированы... Также, для работы с портом - ищи там же Turbopower AsyncProfessional...
Владислав (2004-11-11 17:54:00) [4]Строкой вполне можно пользоваться, если не хотите самостоятельно заботиться о высвобождении памяти. Просто перед использованием данных нужно сделать соответствующее приведение типов.
Но для того, чтобы этим пользоваться, нужно четко понимать, что есть строки, и как они "обрабатываются" компилятором, и какой код в итоге получается.
Судя по фразе "начинает прыгать длина стринга (если попадается ноль)", Вы это себе слабо представляете.
Так в чем вопрос то? Как, конкретно, нужно обрабатывать данные?
Например, размер данных можно хранить в отдельной переменной, а обращаться к данным так PByte(Pointer(MyString))^, или так PByte(Cardinal(Pointer(MyString)) + ByteNumberN)^.
Gun Expert (2004-11-11 16:04:00) [5]всего лишь интерпретацией их компилятором: "начинает прыгать длина стринга (если попадается ноль)."
Zilog (2004-11-11 16:03:00) [6]Удалено модератором
Примечание: Не груби
Rem (2004-11-11 15:58:00) [7]Gun Expert (11.11.04 15:53)
Чем, по-Вашему, отличаются приведенные Вами типы данных в контексте вопроса?
Zilog © (11.11.04 15:19)
Вы что, не знаете, что такое массив?
Gun Expert (2004-11-11 15:53:00) [8]используется string или null-terminated string? Если string, то каким именно образом ты их туда "пихаешь"?
Rem (2004-11-11 15:37:00) [9]Уважаемый!!!!
Если Вы работаете с COM портами, то должны разбираться в различиях между строкойи массивом! Зачем Вы беретесь за то, в чем ничертане разбираетесь, и пытаетесь сохранить в строке то, что строкой не является?!!!
>>Как хранить?
>>предложите pls, как правильно обработать эти данные?
Так хранить или обрабатывать?!