基于TLV编码对数据结构进行编码

Encoding a data structure based on TLV encoding

本文关键字:编码 数据结构 TLV 基于      更新时间:2023-10-16

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

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
  • 由于这个过程是重复的,我可以将其模块化吗
  • 最好的方法是什么
  • 有没有办法按顺序访问参数
  • 如何在参数和它的标记之间建立关系

值的长度是可变的。

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

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

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

这里的一个小挑战是&Data_Struct::parameter1的类型可能不同于&Data_Struct::parameter2;因此,您的表必须通过包装器、指向基类的指针或类似的东西来保存它。