int StartByteOffset = (startBit % 8);
int StartByteNumBits = (8-startBit % 8);
int EndByteOffset = EndBit % 8;
int StartByteIndex = startBit / 8;
int EndByteIndex = EndBit / 8;
int ByteIndexLen = EndByteIndex - StartByteIndex + 1;
uint32_t Value = 0;
uint8_t Temp = 0;
for(int i=0; i<ByteIndexLen; i++)
{
if((StartByteOffset!=0) && i==0)//
{
Value |= data[StartByteIndex]>>StartByteOffset;
}
else if((i==0) && (StartByteIndex!=EndByteIndex))
{
Value |= data[StartByteIndex]>>StartByteOffset;
}
else if((i==0) && (StartByteIndex==EndByteIndex))
{
Value = (uint8_t)((uint8_t)(data[EndByteIndex]<<(7-EndByteOffset)))>>(7-EndByteOffset);
}
else if((EndByteOffset!=0) && (i==(ByteIndexLen-1)))
{
Temp = (uint8_t)((uint8_t)(data[EndByteIndex]<<(7-EndByteOffset)))>>(7-EndByteOffset);
Value |= (Temp)<<((i-1)*8+(StartByteNumBits));
}
else
{
Value |= (uint32_t)(data[StartByteIndex+i]<<((i-1)*8+(StartByteNumBits)));
}
}
return Value;