В настоящее время я использую систему ведения журнала, которая использует значение тега для определения параметра, который он будет хранить. Мы используем следующий формат: тег + время + значение.
Следующим шагом является получение зарегистрированного сообщения и его отправка на сервер с использованием буферов протокола для сериализации данных.
Буфер протокола .proto, предоставляет структуру со всеми полями, каждое из которых соответствует тегу в исходной системе ведения журналов.
Проблема возникает, когда мне нужно эффективно прочитать тег и присвоить значение полю вструктура буфера протокола. По сути, я хотел бы, например, взять тег 5 и найти поле 5 в структуре и записать значение.
Я знаю, что это можно сделать с помощью переключателей, но мы используем около 50теги, поэтому я хотел бы избежать этого решения, если это возможно. Я прилагаю пример структуры, чтобы проиллюстрировать проблему.
/* Struct definitions */
typedef struct _Profiles {
int32_t param1;
int32_t param2;
int32_t param3;
int32_t param4;
int32_t param5;
int16_t param6;
int32_t param7;
uint32_t param8;
int32_t param9;
int32_t param10;
uint32_t param11;
int32_t time;
/* @@protoc_insertion_point(struct:Profiles) */
} Profiles;
Ожидаемый результат будет в том, что я могу сохранить зарегистрированную строку, как показано ниже: 5 1345643 1500 (тег, время, значение)
в структуру буфера протокола:
profiles.param5 = 1500
profiles.time = 1345643
без необходимости в 12 случаях переключения (в этом примере). По сути, как я могу получить доступ к 5-му объявленному полю структуры, используя целое число / перечисление.
Имейте в виду, что каждое поле структуры может потенциально иметь различный тип.