2015-04-28 5 views
0

Пакеты, поступающие по сети, имеют добавочные байты, добавленные в конце для выравнивания. Я хочу пропустить эти байты, но размер пакета является переменным, но известен. Учитывая число n, как мне его округлить до следующего 4-байтового выравнивания?Как перейти к следующему 32-битовому выравниванию?

+0

http://stackoverflow.com/questions/4840410/how-to-align-a-pointer-in-c – gurka

ответ

1

Для любого целого n и любой шаг k (как положительных, так), вы можете вычислить наименьшее кратное k, что это не меньше, чем n через:

(n + k - 1)/k * k 

Это использует тот факт, что неотъемлемыми деление обрезает.

+0

Итак, для 4-байтового выравнивания это будет '(n + 32 - 1)/32 * 32 '? –

+0

@templateboy: Если вы считаете бит, да, хотя это маловероятно. Вероятно, вы должны рассчитывать в байтах, то есть в размере наименьшей выделяемой (и, следовательно, совместимой) единицы хранения. –

Смежные вопросы