0 / 0 / 0
Регистрация: 22.12.2008
Сообщений: 9
|
|
1 | |
Распаковка 32 битного числа22.12.2008, 19:07. Показов 2280. Ответов 1
Метки нет (Все метки)
Реализовали такой алгоритм запаковки со всякими сдвигами.
В файл пишется блоками по 17 байт, в которые зашито 8 32-битных чисел. Код
int coder(long *ar(массив данных long, который пакуют),unsigned int num(кол-во эл-тов пакуемого массива),unsigned char **bf(запакованый массив), unsigned int *nbf (длина запакованного массива)) //....Pack 17-bit numbers { unsigned int ii,ll,kk; long el,el1; ll = num*17/8; el1 = 255; if( *nbf > 0 ) free(*bf); *nbf = ll; if( (*bf = calloc(*nbf,sizeof(unsigned char))) == NULL ) return(0); for(ll=0,kk=0; ll<num && kk<*nbf; ) { for(ii=0; ii<8; ii++) { el = (ar[ll] << ii); bf[0][kk++] += (unsigned char)(el & el1); bf[0][kk++] = (unsigned char)((el>>8) & el1); bf[0][kk] = (unsigned char)(el>>16); ll++; } kk++; } return(1); } long ar[8] = {2602,2597,2598,2598,2601,2600,2600,2600}; соотв."упакованный" массив unsigned char dig[17] = {0x2A,0x0A,0x4A,0x14,0x98,0x28,0x30,0x51,0x90,0xA2,0x00,0x45,0x01,0x8A,0x02,0x14 ,0x05}; Я распаковываю его так: Код
/* unsigned char dig[17] = {0x2A,0x0A,0x4A,0x14,0x98,0x28,0x30,0x51,0x90,0xA2,0x00,0x45,0x01,0x8A,0x02,0x14,0x05}; */ long el = 0, el1 = 255; long dat, kk = 16; for (int i = 0; i<8; i++) { el = (long)((dig[kk--])<<16); el = (long)(((dig[kk--])&el1)<<8); el += (long)(el1&(dig[kk])); dat = (el>>7-i); } что я делаю не правильно???
0
|
22.12.2008, 19:07 | |
Ответы с готовыми решениями:
1
специфика создание 32 - х битного и 64 - х битного приложение Переполнение 32-битного числа Вычисление факториала 20-битного числа Сдвиг 128-битного числа |
118 / 12 / 3
Регистрация: 21.08.2007
Сообщений: 222
|
|
22.12.2008, 20:08 | 2 |
Объясните, что у вас здесь происходит ? И что у вас перед этим в bf[0][kk] ? Разберитесь, что с чем складываете.
0
|
22.12.2008, 20:08 | |
22.12.2008, 20:08 | |
Помогаю со студенческими работами здесь
2
Реализация 128-битного числа Распаковка средствами VBA Excel 32-битного целого числа в два 16-битных Передача 32 битного числа по USART Преобразование 32-битного числа из dx:ax в строку Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |