Форум программистов, компьютерный форум CyberForum.ru

Распаковка 32 битного числа - C++

Восстановить пароль Регистрация
 
zhrkian
0 / 0 / 0
Регистрация: 22.12.2008
Сообщений: 9
22.12.2008, 19:07     Распаковка 32 битного числа #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); 
            }
первые 5 long чисел достаются нормально, а потом 3 числа - белеберда...
что я делаю не правильно???
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.12.2008, 19:07     Распаковка 32 битного числа
Посмотрите здесь:

C++ Распаковка строки
Распаковка архива C++
C++ Распаковка файла
C++ Реализация 128-битного числа
C++ Распаковка файла
C++ специфика создание 32 - х битного и 64 - х битного приложение
Распаковка программы C++
DjvuLibre и распаковка C++
C++ Не компилируется 64-битная DLL из 32-битного проекта
Вычисление факториала 20-битного числа C++
C++ Распаковка кортежа
C++ Эмуляция 128-битного типа

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
22.12.2008, 20:08     Распаковка 32 битного числа #2
Цитата Сообщение от zhrkian Посмотреть сообщение
bf[0][kk++] += (unsigned char)(el & el1);
Объясните, что у вас здесь происходит ? И что у вас перед этим в bf[0][kk] ? Разберитесь, что с чем складываете.
Yandex
Объявления
22.12.2008, 20:08     Распаковка 32 битного числа
Ответ Создать тему
Опции темы

Текущее время: 18:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru