Мне нужно декодировать некоторый байтовый массив (необработанные данные).Он может состоять из базовых типов данных (int, unsigned int, char, short и т. Д.). В соответствии с определенной структурой, мне нужно интерпретировать их.Ниже приведен пример:
struct testData
{
int a;
char c;
};
unsigned char** buf = {0x01,0x00,0x00,0x00,0x41}
example byte array(in little endian) : 0100000041
should give decoding like : a = 1, c = 'A'
Данные выборки могут быть очень большими, и структура выборки (например, testData) может содержать от 200 до 3000 полей.Если я использую приведение, чтобы прочитать соответствующие данные из ** buf и установить указатель, как показано ниже:
int a = *(reinterpret_cast<int*>(*buf);
*buf += 4;
char c = **buf;
*buf += 1;
Мой ЦП довольно высок, если число файлов, которые необходимо декодировать, велико.пример:
struct testData
{
int element1;
char element2;
int element3;
... ...
... ...
short element200;
char element201;
char element202;
}
Есть ли способ уменьшить нагрузку на процессор, а также сохранить декодирование очень быстрым?
У меня есть два ограничения:
- "Структураможет содержать дополнительный байт. "
- У меня нет контроля над тем, как будет определена структура.Структура также может содержать вложенные элементы.