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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
zhrkian
0 / 0 / 0
Регистрация: 22.12.2008
Сообщений: 9
#1

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

22.12.2008, 19:07. Просмотров 1027. Ответов 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 битного числа
Посмотрите здесь:

специфика создание 32 - х битного и 64 - х битного приложение - C++
Господа допустим есть программа 32-х битная как из неё сделать 64-х битную . Интересует вообще как это реализуется и на сколько сложна...

Реализация 128-битного числа - C++
Здравствуйте. В институте дали задание: реализовать стек типа &quot;128-битного&quot; числа. если использовать long long double то максимум 10...

Эмуляция 128-битного типа - C++
В GCC есть возможность работы со 128-битным типом __int128_t. Как включить поддердку такого типа в Visual Studio?

Не компилируется 64-битная DLL из 32-битного проекта - C++
Добрый день! У меня есть проект MS VS2010 Prof+WinDDK7600, 32-битная DLL принтпроцессора. Во время печати спулер системы ее...

Распаковка строки - C++
Задача Вот мой код (прошу не судить за быдло код, за красотой не гнался). Ну так вот, на моей машине все тесты проходит, а там даже...

Распаковка файла - C++
Здравствуйте! Столкнулся с проблемой в распаковке екзешного файла с помощью огромного количества распаковщиков. Пишет сообщение Microsoft...

Распаковка программы - C++
Здравствуйте, уважаемые програмисты. Разрешите обратиться за разъяснением. Нашла интересную программу по русскому языку, но не могу её...

Распаковка кортежа - C++
Подскажите, пожалуйста, как можно вызвать функцию, передав ей в качестве аргументов некоторые значения, подсчитанные заранее и упакованные...

Распаковка файла - C++
Всем привет! Мне нужна маленькая помощь,мне нужно написать программу для распаковки файла в формате .sf Суть такая: Выбираешь...

Распаковка архива - C++
Как распаковать rar и zip архивы? p.s. сейчас я это делаю через запуск стороннего софта через CreateProcess, но хотелось бы обойтись без...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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] ? Разберитесь, что с чем складываете.
Ответ Создать тему
Опции темы

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