Существует несколько различных механизмов заполнения , которые широко используются сегодня; какой из них выбран, в основном зависит от того, как разработчик протокола выбрал его и сказал, что это стандарт для этого протокола. (Я не знаю каких-либо веских причин выбирать одну над другими.)
Самый распространенный из известных мне и работающий над разрешением суббайтового (битового) заполнения - это добавление одного 1
бита, за которым следует столько 0
битов, необходимых для завершения блока.
Следующим наиболее распространенным из известных мне является заполнение нулями или случайными данными и использование последнего байта в блоке для указания количества байтов, использованных для заполнения.
Вы также можете использовать в качестве значения байта любое количество байтов, которое необходимо использовать для заполнения; pad с 0x01
, если вам нужно добавить один байт, 0x04 0x04 0x04 0x04
, если вам нужно заполнить четыре байта и т. д.
Одна маленькая хитрость, которая может вас догнать, заключается в том, что вам почти всегда нужно добавлять блок заполнения - даже если весь блок заполнен - просто для того, чтобы у вас было обратимое преобразование. Если вы не добавите блок заполнения, когда сообщение кратно размеру блока, вы можете попытаться удалить допустимое содержимое сообщения в качестве заполнения. Вы можете либо сигнализировать об отсутствии заполнения через какой-либо другой механизм, либо вы всегда можете добавить заполнение. (Что часто проще.)