Мне нужно перенести некоторые данные по относительному медленному (вплоть до 1 Кбит/с) соединению. Я прочитал, что кодирование буферов протокола Googles является эффективным. Thats true для большинства моих данных, но не для булевых значений, особенно если это повторяющееся поле. Проблема заключается в том, что мне приходится передавать вместе с другими данными указанное число (15) логических значений каждые 50 миллисекунд. Протобуф кодирует каждое логическое значение в один байт для идентификатора поля и одного байта для логического значения (0x00 или 0x01), что приводит к 30 байтам данных для 15 булевых значений.Буферы протоколов - наилучшая практика для повторяющихся логических значений
Так что я ищу лучший способ кодирования этого сейчас. У кого-то тоже была эта проблема? Какова была бы лучшая практика для достижения эффективной кодировки для этой ситуации?
Моей идеей было использовать нумерованный тип данных (uint32) и ручной кодировать данные, для каждого bool один бит целого. Любые отзывы об этой идее?
Я хотел бы использовать в этом случае uint16. uint16_t rightmost16bits (uint32_t i) { return (uint16_t) (i >> 16); } – Nostradamus
FWIW Я раньше использовал протокольные буферы - я бы пошел с вашей идеей uint32; это звучит более эффективно. – splig
Является ли '[упакованный = истина]' для вашего повторяющегося логического поля уменьшением количества байтов? –