编辑代码

#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;                         /* start bit byte position */
    startbyte_bitsnum=startbit-startbyte*8u+1u;    /* bits of start bit byte valid bits number */
    /* Special handle for start byte */
    bytes_index=startbyte;
    rtrn_value=data[bytes_index]&(uint8)((uint8)(0xFFu<<(8u-startbyte_bitsnum))>>(uint8)(8u-startbyte_bitsnum));
    current_bits_unhdl=len-startbyte_bitsnum;
    /* Handle entire bytes */
    while(current_bits_unhdl>=8u)
    {
        bytes_index++;
        rtrn_value=(rtrn_value<<8u)|(uint32)data[bytes_index];
        current_bits_unhdl=current_bits_unhdl-8u;
    }

    /* Special handle for end byte */
    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;
    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
    rtrn = Get_Defined_Bits_Value(Array,7,8);
    printf("rtrn %d\n",rtrn);
    return 0;
}