假设我有一个数据集合(例如:字符串)必须存储在填充的二进制文件中,以便每个字符串,例如,4字节对齐.
因此,如果我有一个长度为11的字符串,它将填充到12(使用空字节).
如果我有一个长度为24的字符串,则不需要填充.
如果我的字符串长度为6,则会填充为8个字节.
如何计算单个表达式中所需的填充量?
我试过4 - (string_length % 4)但是当我的字符串长度是4的倍数时它失败了.
Ned*_*der 15
这看起来很奇怪,但给出了正确的答案:
(4 - (string_length % 4)) % 4
Run Code Online (Sandbox Code Playgroud)
Joh*_*sie 15
如果对齐是2的幂(2,4,8,...),则有更快的方法来计算填充.以下运行是因为二进制&类似于2的幂的%:%(2^x)并且&(2^x-1)对于正数执行相同的操作.注意:&将删除符号位,因此始终返回正模数结果.
所以(4 - (string_length & 3)) & 3也会这样做(4 - (string_length % 4)) % 4.使用正模数属性可以简化为
(-string_length) & 3!
如果您想将结果添加到大小,您甚至可以进行更多优化:
padded_length = (string_length + 3) & ~3 从语义上讲,这会将数字'四舍五入'到填充大小为4.