Я сделал функцию для распаковки двоичных данных, используя функцию varadic, она принимает разные типы в зависимости от того, что вы хотите «закодировать / декодировать».
Вы бы использовали это как:
uint32_t a;
uint16_t b;
uint16_t c;
uint8_t *buf = ....;
depickle(buf,"sis",&a,&b,&c);
где 's' ожидает uint16_t * и декодирует 2 байта из buf
в a
как младший порядок байтов, 'i' говорит, чтобы декодировать 4 байта как младший порядок байтов в 'b'
Илинапример, декодировать 4 байта как старшие порядковые номера в uint32_t:
uint32_t a;
uint8_t buf[] = {0x12,0x34,0x56,0x78};
depickle(buf,"I",&a);
Существует ранняя версия около здесь .