bitutil_hal.cpp 1.81 KB
#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;
   }