2010-11-26 7 views
2

Ich baue einen Protokollanalysator. Ich bin neu in C# (hat mit C gearbeitet).C# -Strukturdefinitionen für Protocol Analyzer

Ich habe einen Byte-Stream, der analysiert und in mehrere Strukturen gefüllt werden muss. Die Daten kommen herein und auf jede Daten können wir nur entscheiden, welche Struktur und welche Größe (Daten können auch Array von Strukturen sein). Ich finde es schwierig, mit dem generischen Design der Strukturen zu kommen, in dem ich die eingehenden Bytes einfach so abbilden kann, wie es in den Strukturen ist. In C ist dies einfach, da wir den void * -Typ verwenden können, um ihn bei Bedarf zu werfen und in den entsprechenden Strukturen zu speichern.

Die typischen Datenstrukturen sind wie

 

Typedef struct DATA_PKT 
{ 
    intu16 choice; //this tells which one of the below union to use ! 
    intu16 length; 

    union 
    { 
    Data_Type_A DataA; 
    Data_Type_B DataB; 
    Data_Type_C DataC; 
    } 
} 

Typedef struct Data_Type_A 
{ 
    Ver_t version; 
    Params_t param; 
} 

Typedef struct Vert_t 
{ 
    Int Verlen; 
    VersData_t *versions;  //here starts versions info of length= Verlen 
} 

Typedef struct VersData_t 
{ 
    Int VerID; //we have a variety of version info. This id tells which version info 
    ANY_t ver; 
} 

Typedef struct ANY_t 
{ 
    Int len; 
    Char *data; 
} 

Typedef struct Params_t 
{ 
    Int Len;   //total length if the structure 
    Int ParamCount; // # of params present in this structure 
    Param_t *params 
} 

Typedef struct Param_t 
{ 
    Int ParamID; //we have a variety of param info. This id tells which param info 
    ANY_t param; 
} 

Wenn jemand über ähnliche probs gekommen war uns bitte helfen, es zu lösen. Bitte teilen Sie alle Codebeispiele, wenn Sie haben.

Schätzen Sie Ihre Bemühungen zu helfen. Grüßen, abhayadev s

Antwort

0

Sie können eine Blit-able Struktur definieren (Layout: Sequential und enthält keine Referenzen) und dann Code verwenden Verwendung mit Zeigern sehr ähnlich zu arbeiten, wie Sie es in c tun.

Alternativ können Sie eine Kombination aus Reflexion und BitConverter verwenden. Aber das ist ein bisschen komplexer.

+0

danke, aber ich konnte Ihre Kommentare nicht gut bekommen. Können Sie einige Beispiele zeigen? –