我正在构建一个协议分析器。我是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
答案 0 :(得分:0)
你可以定义一个blit-able struct(Layout:Sequential并且不包含引用),然后使用用法代码来处理非常类似于你在c中执行它的指针。
或者,您可以使用反射和BitConverter的组合。但那有点复杂。