|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Serge Kanilo 2:5020/400 16 Jan 2002 20:27:37 To : Avernin Edward Subject : Re: Упаковка данных(принцип записи в файл) -------------------------------------------------------------------------------- "Avernin Edward" <edward@atnet.ru> wrote in message news:a23f0r$2qi1$1@Sonix.atnet.ru... > Видимо я не совсем правильно задал вопрос. Вот например у меня есть 2 Точно. > функции которые решают мою проблему. > Объясните как они работают. А что тут объяснять? Функции по-видимому для записи 12 или 10 битных (по крайней мере не более 24 бит) значений в файл с использованием getc/putc, input_bit_buffer/output_bit_buffer четырехбайтные буфера ввода/вывода input_bit_count/output_bit_count - счетчики невв/выведенных битов При записи число обрезается до нужного числа битов и дописывается справа к остатку в буфере, вывод осуществляется с левого бита и число сдвигается влево на 8 бит. Hевыведенный остаток храниться в буфере до следующего вывода (по видимрму в конце следует записать несколько фиктивных нулей для завершения). Ввод - обратный процесс. Функции написаны не лучшим образом: могут использоваться одновременно только с одним файлом, или требуется подсчет числа вызовов; используют 32 вместо sizeof(long), возможно, все можно было бы сделать прозрачнее и более гибко, введя более длинный буфер (хотя бы 2 long) и вынеся настройки в отдельную структуру и дописав функции открытия/закрытия и т.д. (хотя это уже дело вкуса) Cheers, Serge PS: Возможно, их могут использовать в обучении азам С, если это так, то я сделал ошибку :( > output_code(FILE *output,unsigned int code) > { > static int output_bit_count=0; > static unsigned long output_bit_buffer=0L; > output_bit_buffer |= (unsigned long) code << (32-BITS-output_bit_count); > output_bit_count += BITS; > while (output_bit_count >= 8) > { > putc(output_bit_buffer >> 24,output); > output_bit_buffer <<= 8; > output_bit_count -= 8; > } > } --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/44215f7757ea.html, оценка из 5, голосов 10
|