如何舍入到下一个 32 位对齐?

How do I round to the next 32-bit alignment?

来自网络的数据包在末尾添加了填充字节以进行对齐。我想跳过这些字节,但数据包大小是可变的但已知。给定一个数字 n,我如何将它四舍五入到下一个 4 字节对齐?

对于任何整数 n 和任何步长 k(均为正数),您可以通过以下方式计算不小于 nk 的最小倍数:

(n + k - 1) / k * k

这利用了整数除法截断的事实。

另一个版本。 n 是你要下车的数字 4(比如 k)。公式为=n+k-n%k(其中 % 是模数)

例如(在 Unix bc 计算器中)

k=4
n=551
n+k-n%k
552

检查它是否对齐:

scale=4
552/4
138.0000