- 论坛徽章:
- 0
|
这个样子行不?自己测试一下
void catbit(unsigned char *data,int *array,int n_array,int n_bits)
{
int start= 0;
int point = 0;
int tmp = 0;
int c = 0,i=0;
char lost =0 ;
char c_tmp = 0;
char *p,*p1;
int len = (int)n_bits/8;
int len1 = 0;
c = n_bits%8;
if( c > 0 )
len++;
p = data;
for(i=0; i< n_array; i++)
{
tmp = array;
tmp <<= 32-(n_bits+start);
p1 = (char *)&tmp;
if(c != 0)
{
c_tmp = 0xff;
c_tmp >>= start;
*p1 = (*p1) & c_tmp; //clear
*p1 = *p1 & lost; // load lost to frist Byte
start += (8-c);
if( start >= 8 )
len1 = len + 1;
else
len1 = len;
start = start%8;
}
memcpy(p, &tmp, len1);
p1 += len1;
lost = *p1;
p += len1;
}
} |
|