Кодирование структуры данных на основе кодирования 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
  • Поскольку процедура повторяется, могу ли я разделить ее на модули?
  • Как лучше всего это сделать?
  • Есть ли способ получить доступ к параметрам последовательно?
  • Как я могу установить связь между параметром и его тегом?

Длина значения является переменной.


person sajas    schedule 14.02.2013    source источник


Ответы (1)


Вам нужно будет создать таблицу, содержащую пары элементов и тегов, например {&Data_Struct::parameter1, TagForParam1}. Это неизбежно, поскольку компилятор не может угадать этот тег.

Вам также необходимо определить, что вы считаете «пустыми» или «действительными данными». Наверное, это зависит от типа. Например. является ли +INF допустимым значением с плавающей запятой? Итак, добавляем перегруженные функции bool IsValid(T)

Теперь вы можете написать общую процедуру, которая проходит по таблице, извлекает каждый параметр, проверяет его допустимость и записывает в выходной поток.

Небольшая проблема заключается в том, что тип &Data_Struct::parameter1 может отличаться от &Data_Struct::parameter2; поэтому ваша таблица должна хранить его через оболочку, указатель на базовый класс или что-то подобное.

person MSalters    schedule 14.02.2013