Math 计算n字节对齐所需的填充

Math 计算n字节对齐所需的填充,math,Math,假设我有一组数据(例如字符串),这些数据必须存储在一个填充的二进制文件中,以使每个字符串(例如)都是4字节对齐的 因此,如果我有一个长度为11的字符串,它将被填充到12(带有空字节)。 如果字符串长度为24,则不需要填充。 如果我的字符串长度为6,它将被填充到8字节 如何计算单个表达式中所需的填充量 我尝试了4-(字符串长度%4),但当我的字符串长度是4的倍数时失败。这看起来很奇怪,但给出了正确的答案: (4 - (string_length % 4)) % 4 如果对齐是二的幂(2,4,8,

假设我有一组数据(例如字符串),这些数据必须存储在一个填充的二进制文件中,以使每个字符串(例如)都是4字节对齐的

因此,如果我有一个长度为11的字符串,它将被填充到12(带有空字节)。
如果字符串长度为24,则不需要填充。
如果我的字符串长度为6,它将被填充到8字节

如何计算单个表达式中所需的填充量


我尝试了
4-(字符串长度%4)
,但当我的字符串长度是4的倍数时失败。

这看起来很奇怪,但给出了正确的答案:

(4 - (string_length % 4)) % 4

如果对齐是二的幂(2,4,8,…),则有一种更快的方法来计算填充。由于二进制&与%的二次幂相似:
%(2^x)
&(2^x-1)
对正数也一样。注意:&将删除符号位,因此始终返回正模结果

因此
(4-(字符串长度&3))&3
将执行与
(4-(字符串长度%4))%4
相同的操作。使用正模特性,这可以简化为
(-string\u length)&3


如果要将结果添加到大小,您甚至可以进行更多优化:

padded_length=(string_length+3)和~3
从语义上讲,这将数字“四舍五入”为4的填充大小。

公共静态final int getByteAlignedIndex(final int pVariableDataIndex,final int pVariableDataLength,final int pbytelighting){
public static final int getByteAlignedIndex(final int pVariableDataIndex, final int pVariableDataLength, final int pByteAlignment) {
    return pVariableDataIndex + (pVariableDataLength & 0xFFFFFFFC) + ((((pVariableDataLength & 0b1)|((pVariableDataLength & 0b10) >> 1))) << 2);
}

返回pVariableDataIndex+(pVariableDataLength&0xfffffc)+(((pVariableDataLength&0b1)|((pVariableDataLength&0b10)>>1)))啊,修改结果。没想到。这种技术有标准名称吗?