Frage

Ich bin derzeit eine DHCPMessage Klasse in c # zu bauen.

RFC finden Sie hier: http://www.faqs.org/rfcs/rfc2131. html

Pseudo

public object DHCPMessage
{
    bool[8] op;
    bool[8] htype;
    bool[8] hlen;
    bool[8] hops;
    bool[32] xid;
    bool[16] secs;
    bool[16] flags;
    bool[32] ciaddr;
    bool[32] yiaddr;
    bool[32] siaddr;
    bool[32] giaddr;
    bool[128] chaddr;
    bool[512] sname;
    bool[1024] file;
    bool[] options;
}

Wenn wir uns vorstellen, dass jedes Feld eine feste Länge Bit-Array, was ist:

  1. Die versitile
  2. Aus der Praxis

Art und Weise darzustellen, dies als eine Klasse ???

oder .. Wie würden Sie dieses schreiben? :)

War es hilfreich?

Lösung

Sie sind auf dem falschen Weg mit diesem, ist es nicht ein Bit-Vektor. Die Nachricht wird in „Oktette“ definiert ist, besser als „Byte“ bezeichnet. Eine äquivalente C # Erklärung, dass Sie mit Marshal.PtrToStructure verwenden können, ist:

    [StructLayout(LayoutKind.Sequential, Pack=1, CharSet=CharSet.Ansi)]
    struct DHCPMessage {
        public byte op;
        public byte htype;
        public byte hlen;
        public byte hops;
        public uint xid;
        public ushort secs;
        public ushort flags;
        public uint ciaddr;
        public uint yiaddr;
        public uint siaddr;
        public uint giaddr;
        [MarshalAs(UnmanagedType.ByValArray, SizeConst=16)]
        public byte[] chaddr;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst=64)]
        public string sname;
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst=128)]
        public string file;
    }

Sie müssen die variable Länge Optionen Feld separat behandeln.

Andere Tipps

Für den Anfang, Sie könnten versuchen, die BitArray Klasse. Keine Notwendigkeit, das Rad neu zu erfinden hier.

Wenn Sie besorgt sind darüber zu viel Platz / Speicher-Aufnahme, nicht sein. Nur initialisieren es auf die richtige Größe:

BitArray op = new BitArray(8);

(Obige wird 8 Bits halten und 1 Byte in Anspruch nehmen sollte)

Sind Sie sicher, dass Sie etwas sein, unter Verwendung von Arrays für einige von ihnen? Zum Beispiel können Sie Byte für 8 Bit, int für 32 Bit und Byte-Arrays für Stücke, die Karte zu null verwenden Strings wie ‚sname‘ beispielsweise beendet. Dann können Sie einfach bitweise Operatoren (&, |). Überprüfen / manipulieren die Bits

Hier sind einige Beiträge, die ich auf eine Struktur zum Konvertieren von TCP-Header haben, die auch behandelt endianness etc.

http://taylorza.blogspot.com /2010/04/archive-structure-from-binary-data.html http://taylorza.blogspot.com/2010/ 04 / Archiv-binär-Daten-from-structure.html

Diese sind sehr alt, ich wanderte sie von meinem alten Blog nur so können sie verloren gehen nicht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top