//////////////////////////////////////////////////////////////////////// Распаковка NUM_BIT-ных слов
////////////////////
unsigned char Area[] = {
BIN8(11111110), BIN8(00000011), BIN8(11111000),BIN8(00001111),
BIN8(11100000), BIN8(00111111), BIN8(10000000),
BIN8(11111110), BIN8(00000011), BIN8(11111000),BIN8(00001111),
BIN8(11100000), BIN8(00111111), BIN8(10000000),
BIN8(11111110), BIN8(00000011), BIN8(11111000),BIN8(00001111),
BIN8(11100000), BIN8(00111111), BIN8(10000000)
};
// in_Buf - входной массив
// nw - номер NUM_BIT-ного слова из массива
#define NUM_BIT 7
// нормировка возвращаемых значений
#define NORMA 0x7f
unsigned char UnPackData( unsigned char* in_Buf, unsigned int nw )
{
unsigned char first_byte;
unsigned int glue_word;
nw *= (unsigned int)NUM_BIT;
first_byte = (unsigned char)(nw / 8);
glue_word = (((unsigned int)in_Buf[ first_byte ] << 8) +
(unsigned int)in_Buf[ first_byte + 1 ]);
return (unsigned char)(( glue_word >> ( (sizeof(unsigned int) << 3 ) - ( nw - (first_byte << 3)) - NUM_BIT)) & NORMA );
}/*UnPackData*/
#undef NUM_BIT
#undef NORMA
///////////////////////////
int main( void )
{
printf("%d \n ", UnPackData( Area, 0 )); // 127
printf("%d \n ", UnPackData( Area, 1 )); // 0
printf("%d \n ", UnPackData( Area, 17 )); // 0
printf("%d \n ", UnPackData( Area, 18 )); // 127
return 0;
}/*main*/