分类: LINUX
2013-03-28 15:20:18
length:新增数据长度;
offset:偏移位置;
U08 ipReassBitmap[];
U08 bitmapBits[8] = {0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01};
//1bit--->8BYTE.1BYTE的空间映射(8X8)byte数据量;
if((offset / (8*8)) == ((offset+length) / (8*8))) //不足一个BYTE单元;((offset+length)/8)不是8的整数倍;
{//定位到B操作单元;
ipReassBitmap[offset / (8*8)] |= (bitmapBits[(offset/8)&7] & ~bitmapBits[((offset+length)/8)&7]);
//如果offset==16,length==32bytes,需要4比特位;bitmapBits[((offset+length)/8)&7]==0x03;bitmapBits[(offset/8)&7]=0x3f
}
else//跨越不同操作单元;
{
ipReassBitmap[offset / (8*8)] |= bitmapBits[(offset / 8) & 7];
for(i = (1 + offset / (8*8)); i < ((offset + length) / (8*8)); ++i)
{
ipReassBitmap[i] = 0xff;
}
ipReassBitmap[(offset + length) / (8*8)] |= ~bitmapBits[((offset + length) / 8) & 7];
}