UdpClient C# Отправка пакетов по определенному протоколу

У меня возникла проблема с кодированием пакетов по определенному протоколу. Мне нужно отправить массив байтов. Но проблема в том, что этот пакет должен иметь определенную структуру. Структура заголовка на картинке:

структура заголовка

Обратите внимание на длину элемента "Резерв" (6 бит). Как мне закодировать такой заголовок, используя массив байтов (byte[])?


Ответы (1 шт):

Автор решения: aepot

Возмите перечисление

[Flags]
public enum HeaderFlags : byte
{
    R = 2,
    C = 1,
    None = 0
}

Заголовок может выглядеть примерно так

public struct Header
{
    public ushort Length;
    public byte Version;
    public byte TTL;
    public ushort SN;
    public byte Type;
    public HeaderFlags Options;
}
Header header = new();
header.Options = HeaderFlags.R | HeaderFlags.C;

Сериализация может выглядеть так

byte[] headerBytes = new byte[8];
BinaryPrimitives.WriteUInt16LittleEndian(headerBytes, header.Length);
headerBytes[2] = header.Version;
headerBytes[3] = header.TTL;
BinaryPrimitives.WriteUInt16LittleEndian(headerBytes.AsSpan()[4..], header.SN);
headerBytes[6] = header.Type;
headerBytes[7] = (byte)header.Options;
→ Ссылка