Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];




Вниз

Не знаю как сделать type xxx=record 


Василий Свиридов   (2002-02-03 00:08) [0]

Проблема заключается в следующем - мне необходимо описать сетевой пакет. (Свой протокол 7 уровня).

В заголовке пакета есть несколько частей, первые две - тип и флаги.

Оба по три байта, но обращаться нужно побитно.

т.е.
нужно не

type packethdr = record
type = byte; <-- кстати, как указать что здесь их 3?
end;

а примерно
type packehdr = record
t1 = bit; <-- такого нету, я просто для примера
end;

Сумбурно конечно, но люди которые пишут протоколы наверное меня поймут



aus   (2002-02-03 01:45) [1]

Странно, что ты взялся писать протоколы, не зная таких вещей.



~Sergius   (2002-02-03 07:17) [2]

Добрый совет -- начни изучение языка с изучения документации и не лезь в форумы с такими вопросоми. Поскольку засмеют.



panov   (2002-02-03 09:34) [3]

Как мне кажется, для работы с битами лучше описать свой класс, а не пользоваться record.



SoftOne   (2002-02-04 03:14) [4]

В принципе, ты прав. Именно так и нужно.
Замечание первое: если ты не работаеш с Д1, то пиши
type packethdr = packed record.
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-04 08:19) [5]

Вот пример крошечного класса для работы с битами...

type TBit16 = class
private
FByte: Byte;
function GetBit(index: Integer): Boolean;
procedure SetBit(index: Integer; t: Boolean=True);
public
property Value: byte read FByte write FByte;
property Bit[index: Integer]: Boolean read GetBit write Setbit;
end;

function TBit16.GetBit(index: Integer): Boolean;
begin
Result := Boolean(FByte and (1 shl index));
end;

procedure TBit16.SetBit(index: Integer; t: Boolean=True);
begin
FByte := FByte or (1 shl index);
end;



Василий Свиридов   (2002-02-04 08:41) [6]

To Panov :>

Спасибо за помощь.

To остальные :>

Блин, страна советов!
Знаете анекдот -
Почему нельзя заниматься любовью на центральной площади города?
- Будут мешать советами!



SoftOne   (2002-02-05 02:37) [7]

Ничтоже сумняшеся, а для чего городить новый класс для обработки битов одного единственного байта? Чем же не подходит Set? А ведь с помощью Set можно обработать 32 байта! И без дополнительного кода.




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.73 MB
Время: 0.015 c
4-66709           vector^               2001-12-22 12:37  2002.02.21  
Как найти чужое окно.Смотрел FAQ , но ни чего не понял :-(


4-66721           Latspell              2001-12-21 16:39  2002.02.21  
Memory maped files, hooks, DLL s, global heap - помогите разобраться.


3-66486           Вика                  2002-01-28 14:04  2002.02.21  
Нужен IB-компонент для прогона SQL-скрипта.


1-66565           Mitrofan              2002-02-04 14:18  2002.02.21  
Библиотека имитационного моделирования для Дельфи


3-66463           Ildar Ibatullin       2002-01-28 07:31  2002.02.21  
Нужна легкая БД под Win -- mySQL?