ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
13 ноября
53192 Топик полностью
Romario (07.03.2006 18:24, просмотров: 1) ответил ReAl на Ключевое слово ПРОДЖУМАНО. А romario в исходном посте написал
ok вот код преобразования массива упакованных 7 битных слов в памяти в нормальный массив 8 битных. недолго думая я понаставил goto чтобы не продумывать вариант реализации без goto я его написал быстро вроде неплохо получилось.
/******************************************************************************
 * DESCRIPTION:
 * 
 * 0:aaaaaaab 1:bbbbbbcc 2:cccccddd 3:ddddeeee 4:eeefffff 5:ffgggggg 6:ghhhhhhh *7:aaaaaaa0
 * 0:0aaaaaaa 1:0bbbbbbb 2:0ccccccc 3:0ddddddd 4:0eeeeeee 5:0fffffff 6:0ggggggg  7:0hhhhhhh *8:0aaaaaaa

 * 0:aaaaaaab 1:bbbbbbcc 2:cccccddd 3:ddddeeee 4:eeefffff 5:ffgggggg 6:g-------
 * 0:0aaaaaaa 1:0bbbbbbb 2:0ccccccc 3:0ddddddd 4:0eeeeeee 5:0fffffff 6:0ggggggg
 *       1           2          3           4          5        6          7
 *****************************************************************************/
void UnPack7bData(u8_t InBuf[],u16_t sz) {

       u8_t  *src = InBuf;
       u8_t  *dst = InBuf;
       u16_t i,j;

	   i    = sz >> 3;
	   dst += sz - 1;           // dst
	   src += (j = sz - i - 1); // src
	   i    = (i + j) & 7;
	   if (i == 0) goto mhf_0;
	   if (i == 6) goto mhf_6;
	   if (i == 5) goto mhf_5;
	   if (i == 4) goto mhf_4;
	   if (i == 3) goto mhf_3;
	   if (i == 2) goto mhf_2;
	   if (i == 1) goto mhf_1;
     //          *
     // src = 6:ghhhhhhh
 mhf_7:	   *dst-- = *src & 0x7f;
	 //                    *   
	 // src = 5:ffgggggg 6:ghhhhhhh
 mhf_6:	   *dst-- = (((*(src - 1)) << 1) & 0x7F) + (*src >> 7);
			src--;
     //                    *
	 // src = 4:eeefffff 5:ffgggggg
 mhf_5:     *dst-- = (((*(src - 1)) << 2) & 0x7F) + (*src >> 6);
			src--;
     //                      *
	 // src = 3:ddddeeee  4:eeefffff
 mhf_4:     *dst-- = (((*(src - 1)) << 3) & 0x7F) + (*src >> 5);
			src--;
     //                     *
	 // src = 2:cccccddd  3:ddddeeee
 mhf_3:     *dst-- = (((*(src - 1)) << 4) & 0x7F) + (*src >> 4);
			src--;
     //                     *
	 // src = 1:bbbbbbcc  2:cccccddd
 mhf_2:     *dst-- = (((*(src - 1)) << 5) & 0x7F) + (*src >> 3);
			src--;
     //                     *
	 // src = 0:aaaaaaab  1:bbbbbbcc
 mhf_1:     *dst-- = (((*(src - 1)) << 6) & 0x7F) + (*src >> 2);
			src--;
     //         *
	 // src = 0:aaaaaaab
 mhf_0:     *dst-- = *src >> 1;

			if (src != InBuf) {
                src--;
                goto  mhf_7;
			}

}