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

Tom*_*Tom 7 c bit-manipulation padding

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

目前我这样做:

pad = (4-size%4)%4;
Run Code Online (Sandbox Code Playgroud)

Typ*_*eIA 5

只要优化的编译器使用位掩码% 4代替除法,我认为您的代码可能很好。这可能会有所改善:

// only the last 2 bits (hence & 3) matter
pad = (4 - (size & 3)) & 3;
Run Code Online (Sandbox Code Playgroud)

但是同样,优化的编译器可能足够聪明,无论如何都可以减少您的代码。我想不出更好的办法了。


cit*_*kid 5

// align n bytes on size boundary
pad n size = (~n + 1) & (size - 1)
Run Code Online (Sandbox Code Playgroud)

这类似于 TypeIA 的解决方案,并且只使用机器语言操作。

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

例子

pad 13 8 = 3
pad 11 4 = 1
Run Code Online (Sandbox Code Playgroud)