/*-----------------------------------------------------------------*/
byte FillByte (byte* pArr, byte AbsBitNum, byte X, bype FuseBitNum)
{
byte Result;
byte byteNum;
byte bitNum;
byte i;
/* проверим номер бита на допустимое значение */
if(AbsBitNum > FuseBitNum) return 0;
Result = 0;
byteNum = AbsBitNum / 8;
bitNum = AbsBitNum % 8;
for(i=0;i<X;++i)
{
/* установим бит результата,
если он установлен во входной последовательности */
if(pArr[byteNum] & (1<<bitNum)) Result |= (1<<i);
/* проверим номер бита на граничное значение */
if(AbsBitNum == FuseBitNum) break;
/* проверим, нет ли перехода на следующий байт последовательности */
if(bitNum == 7) {bitNum=0; ++byteNum;}
else {++bitNum;}
}
return Result;
}
/*-----------------------------------------------------------------*/
void FillArray
(
byte* pSource,
byte* pTarget,
int sizeTarget,
byte X,
byte FuseBitNum
)
{
int i;
byte AbsByteNum;
AbsByteNum = 0;
for(i=0;i<sizetarget;++i)
{
pTarget[i] = FillByte (pSource, AbsBitNum, X, FuseBitNum);
AbsBitNum += X;
}
}
/*------------------------------------------------------------------*/
...
byte SourceBuf[32];
byte TargetBuf[256];
/* цифра 20 - поставил для примера. Сам считай правильное значение */
FillArray (SourceBuf,TargetBuf,20,3,255);
/* 255 = 32*8 -1 - максимально допустимый номер бита */
...
/*------------------------------------------------------------------*/