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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Определить минимал элемент и поменять его местами с первым элементом http://www.cyberforum.ru/cpp-beginners/thread19300.html
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; Правильно сделано ?Если это не всё то что мне осталось дописать ?%) Забыл в названии темы написать Одномерные массивы
C++ Сортировка столбцов матрицы. Уважаемые программисты! Есть следующая задача Дана прямоугольная матрица A. Отсортировать столбцы матрицы в порядке неубывания минимальных элементов столбцов. Нахождение мин. элемента столбца оформить как функцию. Перестановку оформить как функцию. Помогите написать прогу. Умоляю. К сессии не допустят. Я знаю, что в форуме принято показывать свои наработки, но, я говорю честно, по этой... http://www.cyberforum.ru/cpp-beginners/thread19281.html
Массивы и строки C++
Здравствуйте! тут вот в задаче проблема есть. Задание состоит в следующем: нужно прочесть из файла последовательность чисел и эти числа поместить в целочисленный массив для работы с ним (в дальнейшем надо будет упорядочить числа по возрастанию). Так выглядит последовательность в файле: 285 109 27 207 а так должно быть: x=285 x=109 и тд
C++ isalpha
Доброе утро!!!!!!!!! Ребята не могу до конца додумать над такой задачей мне нужно, чтобы в строке mas1 быз произведён подсчёт слов состоящих только из латинских букв их там должно быть 2 слова. Даю листинг. #include <iostream> #include <cctype>
C++ Проблема со сравнением файлов http://www.cyberforum.ru/cpp-beginners/thread19253.html
Доброго времени дня!Пожалуйста помогите в написании программы=)Нужно ввести 2 пути файла с консоли и найти сколько раз содержание второго файла встречается в первом!У меня проблемы как раз с этим поиском..без проблем ввожу пути и программа считает только количество символов в 1 файле(((Очень прошу помогите!:-[..Заранее спасибо:)
C++ Просьба к администрации Я видел есть тема о основных сортировках.это хорошая очень нужная тема.многим я уверен она помогла. Но вот прошу сделать такую же тему про списки(односвязные,двусвязные), стек, очередь, дерево, вагон. подробнее

Показать сообщение отдельно
zhrkian
0 / 0 / 0
Регистрация: 22.12.2008
Сообщений: 9
22.12.2008, 19:07     Распаковка 32 битного числа
Реализовали такой алгоритм запаковки со всякими сдвигами.
В файл пишется блоками по 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 числа - белеберда...
что я делаю не правильно???
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:55. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru