2013-02-14 82 views
0

我必须对基于X.690编码的数据结构中存在的参数进行编码。 假设,我的结构是:基于TLV编码对数据结构进行编码

struct Data_Struct 
{ 
    parameter1 
    parameter2 
    parameter3 
} 

一些或所有这些参数都可以有有效的数据,也就是说,parameter1parameter3。 然后我应该使用TLV编码仅编码parameter1parameter3。 我是否必须按照顺序过程来遵循这一点。像,

Check whether parameter 1 is present 
    If present, find the tag of the parameter from a lookup table and encode it 
Check whether parameter 2 is present 
    If present, find the tag of the parameter from a lookup table and encode it 
Check whether parameter 3 is present 
    If present, find the tag of the parameter from a lookup table and encode it 
  • 由于过程是重复的,我可以模块化呢?
  • 什么是最好的方法来做到这一点?
  • 有什么办法可以顺序访问参数吗?
  • 如何在参数和标签之间建立关系?

该值的长度是可变的。

回答

0

您将需要创建一个表,其中包含成员和标记对,如{&Data_Struct::parameter1, TagForParam1}。这是不可避免的,因为编译器无法猜测该标签。

您还需要定义您认为“空”或“有效数据”。这可能取决于类型。例如。是+INF有效的浮点值?因此,添加重载函数bool IsValid(T)

现在,您可以编写遍历表的通用例程,检索每个参数,检查其是否有效并将其写入输出流。

这里的一个小问题是&Data_Struct::parameter1的类型可能不同于&Data_Struct::parameter2;所以你的表必须通过包装器,指向基类的指针或类似的东西来保存它。