Member
Статус: Не в сети Регистрация: 25.01.2003 Откуда: UA
spmn писал(а):
По всей видимости этот массив объявлен как не динамический.
Разницы нет динамический или статический, адрес есть у всего. Т.е. fwrite Может записать абслютно любой блок данных, ему неважно что лежит по этому адресу и в каком формате.
Код:
short int i = 1; ... fwrite(&i, sizeof(short int), 1, ou);
работает как раз нормально, запишет тебе в файл 2 байта один из которых 0 второй 1... В текстовом виде как ты пытаешся просматривать это выглядит соответственно как пробел и закорлючка, все правильно.
Второй вариант с точки зрения компилятора ничем не отличается от первого. Третий неверен принципиально, ты записываешь в файл адрес переменной или даже адрес указателя на переменную RLE алгоритмы я когда-то реализовывал на асме для работы с .pcx форматом, там упаковка сделана достаточно эффективно.
1. Если символ <192(2 старших бита не установлены) и он не повторяется то просто пишется этот символ
2. Если он поторяется то создается 1 байт заголовок - старшие 2 бита установлены, оставшиеся 6 - количество повторений символа, второй байт сам символ.
3. Если символ >=192 то в любом случае создается заголовок и вторым байтом идет символ, даже если символ был 1 Алгоритм очень простой, ненужен выделенный символ-метка, неплохо сжимает повторяющиеся блоки и создает минимум лишней информации.
Файл читай в буфер кусками, и это буфер побайтно перегоняй с обработкой в другой буфер или прямо в выходной файл(fputc)...
Member
Статус: Не в сети Регистрация: 02.06.2005 Откуда: Khabarovsk
KaYot
KaYot писал(а):
Файл читай в буфер кусками
Я не читаю файл кусками. Я читаю по по байту и сравниваю с предыдущим и сразу пишу. Попутно считаю и если встречаются подходящиеся последовательности сжимаю. Только вот писать пока ... мягко говоря не получается
Member
Статус: Не в сети Регистрация: 25.01.2003 Откуда: UA
spmn писал(а):
Я читаю по по байту
А зачем тогда fread/fwrite использовать ?? Есть более быстрые/удобные функции fgetc/fputc просто читающие/пишущие 1 байт без всяких массивов, указателей, заморочек а еще и с внутренним буферизированием(считай быстрее в разы).
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения