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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Записать в одну строку конкатенацию (соединение) всех строк из файла, разделенные пробелами http://www.cyberforum.ru/cpp-beginners/thread19306.html
Помогите сделать такую задачу в с++,записать в одну строку конкатинацию(соединение) всех строк разделенные пробелами,читать строки из файла,строку записать в файл,использовать библиотеки...
C++ Определить минимал элемент и поменять его местами с первым элементом int i, A, min, max, n; for (i=0; i<15; i++) A=StrToFloat(Memo1->Lines->Strings); min=A; for (i=1.; i<15; i++) if (min>A) min=A; Правильно сделано ?Если это не всё то что мне... http://www.cyberforum.ru/cpp-beginners/thread19300.html
Сортировка столбцов матрицы. C++
Уважаемые программисты! Есть следующая задача Дана прямоугольная матрица A. Отсортировать столбцы матрицы в порядке неубывания минимальных элементов столбцов. Нахождение мин. элемента столбца...
Массивы и строки C++
Здравствуйте! тут вот в задаче проблема есть. Задание состоит в следующем: нужно прочесть из файла последовательность чисел и эти числа поместить в целочисленный массив для работы с ним (в дальнейшем...
C++ isalpha http://www.cyberforum.ru/cpp-beginners/thread19254.html
Доброе утро!!!!!!!!! Ребята не могу до конца додумать над такой задачей мне нужно, чтобы в строке mas1 быз произведён подсчёт слов состоящих только из латинских букв их там должно быть 2 слова. ...
C++ Проблема со сравнением файлов Доброго времени дня!Пожалуйста помогите в написании программы=)Нужно ввести 2 пути файла с консоли и найти сколько раз содержание второго файла встречается в первом!У меня проблемы как раз с этим... подробнее

Показать сообщение отдельно
zhrkian
0 / 0 / 0
Регистрация: 22.12.2008
Сообщений: 9

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

22.12.2008, 19:07. Просмотров 1038. Ответов 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 числа - белеберда...
что я делаю не правильно???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru