本文共 486 字,大约阅读时间需要 1 分钟。
我们在处理数据时,常常会要求数据字节对齐,例如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) :对齐后的数据
转载地址:http://tkadi.baihongyu.com/