计算填充字节数的最佳方法是什么

时间:2013-12-30 18:07:33

标签: c bit-manipulation padding

计算8位数据的填充量的最有效方法是什么,需要是C中32位的倍数?

目前我这样做:

pad = (4-size%4)%4;

3 个答案:

答案 0 :(得分:4)

只要优化编译器使用% 4而不是除法的位掩码,我认为你的代码可能非常好。这可能会略有改善:

// only the last 2 bits (hence & 3) matter
pad = (4 - (size & 3)) & 3;

但同样,优化编译器可能足够聪明,无论如何都要将代码减少到此。我想不出更好的事情。

答案 1 :(得分:2)

// align n bytes on size boundary
pad n size = (~n + 1) & (size - 1)

这与TypeIA的解决方案类似,仅使用机器语言操作。

(~n + 1) computes the negative value, that would make up 0 when added to n
& (size - 1) filters only the last relevant bits.

实施例

pad 13 8 = 3
pad 11 4 = 1

答案 2 :(得分:2)

pad = (-size)&3;

这应该是最快的。

size 0: pad 0
size 1: pad 3
size 2: pad 2
size 3: pad 1