#include <stdio.h>
typedef unsigned char uint8;
typedef unsigned short uint16;
typedef unsigned long uint32;
uint8 Array[16]={253,2,3,4,0x57,6,7,8,1,2,3,4,0x57,6,7,8};
uint32 Get_Defined_Bits_Value(uint8 *data,uint16 startbit, uint8 len);
uint32 Get_Defined_Bits_Value(uint8 *data,uint16 startbit, uint8 len)
{
uint8 startbyte=0u;
uint8 startbyte_bitsnum=0u;
uint8 current_bits_unhdl=0u;
uint8 bytes_index=0;
uint8 Temp_Value=0;
uint32 rtrn_value=0u;
startbyte=startbit/8u;
startbyte_bitsnum=startbit-startbyte*8u+1u;
bytes_index=startbyte;
rtrn_value=data[bytes_index]&(uint8)((uint8)(0xFFu<<(8u-startbyte_bitsnum))>>(uint8)(8u-startbyte_bitsnum));
current_bits_unhdl=len-startbyte_bitsnum;
while(current_bits_unhdl>=8u)
{
bytes_index++;
rtrn_value=(rtrn_value<<8u)|(uint32)data[bytes_index];
current_bits_unhdl=current_bits_unhdl-8u;
}
if( current_bits_unhdl>0 )
{
bytes_index++;
Temp_Value=(data[bytes_index]&((0xFFu<<(8u-current_bits_unhdl))>>(8u-current_bits_unhdl)))>>(8u-current_bits_unhdl);
rtrn_value=(rtrn_value<<current_bits_unhdl)|Temp_Value;
}
return rtrn_value;
}
int main () {
uint32 rtrn;
rtrn = Get_Defined_Bits_Value(Array,7,8);
printf("rtrn %d\n",rtrn);
return 0;
}