int left = S->buflen >> 3;
Получить количество байт слева, предполагая buflen
является измерение в битах.
int fill = 64 - left;
Получить количество байт, которые вы будете поэтому нужно приложить округлить до кратного 64. Следует отметить, что если S->buflen
0 вы будете в конечном итоге добавив целую 64 байта, когда вам не нужно добавить любого, так что ...
if(left && (((datalen >> 3) & 0x3F) >= (unsigned)fill)){
some code here
}
... сделать код здесь, только если были какие-то биты слева и datalen
, преобразованные из бит в байты, по модулю 64, по меньшей мере равен числу дополнительных байт вам нужно написать. Предположительно, потому что datalen
является максимальным размером вывода?
Что вы не понимаете? Какие побитовые операторы? –
Нет, я понимаю, что побитовые операторы просто прекрасны. Часть, которая меня действительно сбивает с толку, делит «datalen» на 8 и ANDing результат с «00111111». – pg1989