#include "bitutil_hal.h" const U8 bitMask[8] = { 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 }; U8 getByteAt(unsigned char * bitStream, int byteIndex) { return bitStream[byteIndex]; } BOOL getBitAt(unsigned char * bitStream, int bitIndex) { int byteIndex = bitIndex / 8; int bitOffset = bitIndex % 8; if ((bitStream[byteIndex] & bitMask[bitOffset]) != 0) return TRUE; else return FALSE; } U32 getIntAt(unsigned char * bitStream,int intIndex) { U32 * bitStream2 = (U32 *) bitStream; return bitStream2[intIndex]; } U8 getByteAtBits(unsigned char * bitStream,int firstBitOffset, int length) { U8 byte = 0x00; int lastBitOffset = firstBitOffset + length - 1; int i, bit; for (bit = lastBitOffset, i = 7; bit >= firstBitOffset; bit--, i--){ int byteIndex = bit / 8; int bitOffset = bit % 8; if ((bitStream[byteIndex] & bitMask[bitOffset]) != 0){ byte = byte | bitMask[i]; } } return byte; } U32 getIntAtBits(unsigned char * bitStream,int firstBitOffset, int length) { U32 integer = 0x00000000; U8 * byte = (U8 *) &integer; int lastBitOffset = firstBitOffset + length - 1; int i, bit; for (bit = lastBitOffset, i = 31; bit >= firstBitOffset; bit--, i--){ int byteIndex = bit / 8; int bitOffset = bit % 8; if ((bitStream[byteIndex] & bitMask[bitOffset]) != 0){ int byteIndex2 = 3 - (i / 8); int bitOffset2 = i % 8; byte[byteIndex2] = byte[byteIndex2] | bitMask[bitOffset2]; } } return integer; }