С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 22.12.2008
Сообщений: 9
1

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

22.12.2008, 19:07. Показов 2280. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Реализовали такой алгоритм запаковки со всякими сдвигами.
В файл пишется блоками по 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.12.2008, 19:07
Ответы с готовыми решениями:

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

Переполнение 32-битного числа
В программу вводится число, которое должно увеличиваться до тех пор, пока не станет отрицательным....

Вычисление факториала 20-битного числа
Здравствуйте. Дано 20-битное беззнаковое целое число. Нужно узнать количество знаков и количество...

Сдвиг 128-битного числа
Есть строчка размером 16 байт.Как сдвинуть бинарное представление этой строки на 25 разрядов влево...

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

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

Распаковка средствами VBA Excel 32-битного целого числа в два 16-битных
Добрый день, Имеется таблица в которой каждое число как бы склеено из двух других. Например в...

Передача 32 битного числа по USART
Здравствуйте, не могу корректно организовать передачу 32 битного числа по USART в ПК. 8 битные...

Преобразование 32-битного числа из dx:ax в строку
Здравствуйте, пишу калькулятор (операция с двумя 4-значными числами со знаком) на ассемблере с...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru