Кодирование структуры данных на основе кодирования TLV

Я должен закодировать параметры, присутствующие в структуре данных на основе кодирования X.690.
Предположим, моя структура:

struct Data_Struct
{
parameter1
parameter2
parameter3
}

Некоторые или все эти параметры могут иметь действительные данные, скажем, parameter1 а также parameter3,
Тогда я должен только кодировать parameter1 а также parameter3 используя кодировку TLV.
Должен ли я следовать последовательной процедуре, чтобы следовать этому. Подобно,

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; поэтому ваша таблица должна содержать ее через оболочку, указатель на базовый класс или что-то подобное.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]