协议分析器的C#结构定义

时间:2010-11-26 15:33:15

标签: c#

我正在构建一个协议分析器。我是C#的新手(曾与C合作过)。

我有一个字节流,必须解析并填充到多个结构中。数据进入每个数据,只有我们可以决定它的结构和大小(数据也可以是结构数组)。我发现难以推出结构的通用设计,我可以将输入的字节映射到结构中。在C中,这很容易,因为我们可以使用void *并在需要时将其类型化并将它们存储在相应的结构中。

典型的数据结构类似于


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;
}

如果有人遇到过类似的问题,请帮我们解决。如果您有,请分享任何代码示例。

感谢您的帮助。 问候, abhayadev s

1 个答案:

答案 0 :(得分:0)

你可以定义一个blit-able struct(Layout:Sequential并且不包含引用),然后使用用法代码来处理非常类似于你在c中执行它的指针。

或者,您可以使用反射和BitConverter的组合。但那有点复杂。