Show BitBuffer.c syntax highlighted
#include "BitBuffer.h"
#include <assert.h>
int // 0 or 1
ReadBitBuffer(
const void *buffer,
size_t bufferLengthInBytes,
size_t bitIndex)
{
assert(buffer);
assert(bufferLengthInBytes);
assert((bufferLengthInBytes*8)-1 >= bitIndex);
size_t bytePosition = bitIndex / 8;
bitIndex %= 8;
size_t rightShiftCount = 7 - bitIndex;
const char *byteBuffer = (const char*)buffer;
byteBuffer += bytePosition;
char byte = *byteBuffer;
byte >>= rightShiftCount;
byte &= 0x01;
return byte ? 1 : 0;
}
void
WriteBitBuffer(
void *buffer,
size_t bufferLengthInBytes,
size_t bitIndex,
int value)
{
assert(buffer);
assert(bufferLengthInBytes);
assert((bufferLengthInBytes*8)-1 >= bitIndex);
assert(0 == value || 1 == value);
size_t bytePosition = bitIndex / 8;
bitIndex %= 8;
size_t leftShiftCount = 7 - bitIndex;
char *byteBuffer = (char*)buffer;
byteBuffer += bytePosition;
char newBit = 0x01 << leftShiftCount;
if (value) {
// Setting a bit.
*byteBuffer |= newBit;
} else {
// Clearing a bit.
*byteBuffer &= ~newBit;
}
}
See more files for this project here