29 uint8_t * Data, uint32_t MaxLength)
31 memset(Data, 0, MaxLength);
32 BitBuffer->
Data = Data;
44 if (NumBits <= 0 || NumBits > 32)
47 nextBitPos = BitBuffer->
BitPos + NumBits;
52 bytePos = BitBuffer->
BitPos / 8;
53 bitsInByte = BitBuffer->
BitPos % 8;
55 BitBuffer->
Data[bytePos] &= (uint8_t) (0xFF << (8 - bitsInByte));
56 shift = NumBits - (8 - bitsInByte);
58 BitBuffer->
Data[bytePos] |= (uint8_t) (Data >> shift);
60 BitBuffer->
Data[bytePos] |= (uint8_t) (Data << (-shift));
61 NumBits -= 8 - bitsInByte;
67 BitBuffer->
Data[bytePos] = (uint8_t) (Data >> shift);
69 BitBuffer->
Data[bytePos] = (uint8_t) (Data << (-shift));
73 BitBuffer->
BitPos = nextBitPos;
78 return (BitBuffer->
BitPos + 7) / 8;
void BitBuffer_SetBits(BitBuffer_t *BitBuffer, int NumBits, uint32_t Data)
void BitBuffer_Init(BitBuffer_t *BitBuffer, uint8_t *Data, uint32_t MaxLength)
uint32_t BitBuffer_GetByteLength(BitBuffer_t *BitBuffer)