![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не знаю как сделать type xxx=record [D5, Win2k]
Василий Свиридов © (2002-02-03 00:08:00)Проблема заключается в следующем - мне необходимо описать сетевой пакет. (Свой протокол 7 уровня).
В заголовке пакета есть несколько частей, первые две - тип и флаги.
Оба по три байта, но обращаться нужно побитно.
т.е.
нужно не
type packethdr = record
type = byte; <-- кстати, как указать что здесь их 3?
end;
а примерно
type packehdr = record
t1 = bit; <-- такого нету, я просто для примера
end;
Сумбурно конечно, но люди которые пишут протоколы наверное меня поймут
SoftOne (2002-02-05 02:37:00) [1]Ничтоже сумняшеся, а для чего городить новый класс для обработки битов одного единственногобайта? Чем же не подходит Set? А ведь с помощью Set можно обработать 32 байта! И без дополнительного кода.
Василий Свиридов (2002-02-04 08:41:00) [2]To Panov :>
Спасибо за помощь.
To остальные :>
Блин, страна советов!
Знаете анекдот -
Почему нельзя заниматься любовью на центральной площади города?
- Будут мешать советами!
panov (2002-02-04 08:19:00) [3]Вот пример крошечного класса для работы с битами...
typeTBit16 = class
private
FByte: Byte;
functionGetBit(index: Integer): Boolean;
procedureSetBit(index: Integer; t: Boolean=True);
public
propertyValue: byte readFByte writeFByte;
propertyBit[index: Integer]: Boolean readGetBit writeSetbit;
end;
functionTBit16.GetBit(index: Integer): Boolean;
begin
Result := Boolean(FByte and (1 shl index));
end;
procedureTBit16.SetBit(index: Integer; t: Boolean=True);
begin
FByte := FByte or (1 shl index);
end;
SoftOne (2002-02-04 03:14:00) [4]В принципе, ты прав. Именно так и нужно.
Замечание первое: если ты не работаеш с Д1, то пиши
type packethdr = packedrecord.
Byte1 : Byte;
Byte2 : Byte;
Flags : TFlags;
end;
Замечание второе: Битовые флаги, наиболее удобно (ИМХО) использовать через (извини panov, этот класс уже давно существует в паскале) set of. Например, описываем:
FlagsVal=(Flag0,Flag1,Flag2,Flag3,flag4,Flag5,Flag6,Flag7);
TFlags = set of TFlagsVal;
panov (2002-02-03 09:34:00) [5]Как мне кажется, для работы с битами лучше описать свой класс, а не пользоваться record.
~Sergius (2002-02-03 07:17:00) [6]Добрый совет -- начни изучение языка с изучения документации и не лезь в форумы с такими вопросоми. Поскольку засмеют.
aus (2002-02-03 01:45:00) [7]Странно, что ты взялся писать протоколы, не зная таких вещей.