Я должен закодировать параметры, присутствующие в структуре данных на основе кодирования 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
Длина значения является переменной.
Вам нужно будет создать таблицу, которая содержит пары элементов и тегов, например {&Data_Struct::parameter1, TagForParam1}
, Это неизбежно, так как компилятор не может угадать этот тег.
Вам также необходимо определить, что вы считаете «пустыми» или «действительными данными». Это, вероятно, зависит от типа. Например. является +INF
действительное значение с плавающей запятой? Итак, добавьте перегруженные функции bool IsValid(T)
Теперь вы можете написать общую процедуру, которая проходит по таблице, извлекает каждый параметр, проверяет, является ли он действительным, и записывает его в ваш выходной поток.
Небольшая проблема здесь заключается в том, что тип &Data_Struct::parameter1
может отличаться от &Data_Struct::parameter2
; поэтому ваша таблица должна содержать ее через оболочку, указатель на базовый класс или что-то подобное.
Других решений пока нет …