C 数据对齐算法

  • Post author:
  • Post category:其他


我们在处理数据时,常常会要求数据字节对齐,例如8字节,16字节对齐等等,大家通常想到的做法是:

unsigned int calc_align(unsigned int n,unsigned align)  
{  
    if ( n / align * align == n)            
        return n;  
    return  (n / align + 1) * align;  
} 

不过这种算法的效率很低,下面介绍一种高效率的数据对齐算法:

unsigned int calc_align(unsigned int n,unsigned align)  
{      
    return ((n + align - 1) & (~(align - 1)));  
}  

这种算法的原理是:

(align-1)         :对齐所需的对齐位,如:2字节对齐为1,4字节为11,8字节为111,16字节为1111…

(&~(align-1)) :将对齐位数据置位为0,其位为1

(n+(align-1)) & ~(align-1) :对齐后的数据



版权声明:本文为sean_8180原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。