The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Заголовков в файле меньше, чем надо"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Заголовков в файле меньше, чем надо" 
Сообщение от victorddt emailИскать по авторуВ закладки(??) on 08-Фев-05, 10:56  (MSK)
Вот прога, которая призвана искать заголовки в файле (заголовком считаю строку из 2 байт - FF D8):

#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>

#define BSIZE 2

int main()
{
FILE *in, *out;
unsigned char buffer[BSIZE];
size_t act_read;
long pos=0, now_pos;
int really_read, i, c;

i = 0;

in=fopen("1.JPG","rb");
out=fopen("1_1.JPG","wb");

printf("\n\nSearching ...\n", i);
while(1)
{
act_read=fread(buffer, BSIZE, 1, in);

if(act_read > 0)
{
fwrite(buffer, BSIZE, 1, out);

if(buffer[0] == 0xFF && buffer[1] == 0xD8)
{
i++;
}
}
else
{
break;
}
}
printf("Searching complete...\n", i);
printf("Found %i file(s)\n\n", i);
}

Поиск ведется в файле 1.JPG. Реально заголовков там, например, 204 шт, а i (счетчик) в конце равно 101.

Что здесь не так?

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Заголовков в файле меньше, чем надо" 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 08-Фев-05, 19:24  (MSK)
Хинт: всегда ли так называемые "заголовки" размещены
на расстоянии 2*n байт от начала файла? Ибо приведённый
кусок кода не найдёт нужную последовательность, если
она расположена по адресу (2*n + 1).
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Заголовков в файле меньше, чем надо" 
Сообщение от victorddt emailИскать по авторуВ закладки(ok) on 09-Фев-05, 08:26  (MSK)
>Хинт: всегда ли так называемые "заголовки" размещены
>на расстоянии 2*n байт от начала файла? Ибо приведённый
>кусок кода не найдёт нужную последовательность, если
>она расположена по адресу (2*n + 1).


Я думал так:
беру по каждые 2 байта и их проверяю на равенство FF D8. Или он тут берет больше, чем 2?

Проверял
sizeof(buffer) = 2
strlen(buffer) = 13, 1, 0 - значения меняются. Может из-за этого?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Заголовков в файле меньше, чем надо" 
Сообщение от DeadMustdie emailИскать по авторуВ закладки(??) on 09-Фев-05, 10:33  (MSK)
>Я думал так:
>беру по каждые 2 байта и их проверяю на равенство FF D8.
>Или он тут берет больше, чем 2?
>

Пример (в хексах):
       0A FF D8 1E
На первом шаге вышеприведённый алгоритм
ухватит '0A FF', на втором - 'D8 1E'.
Проверка на 'FF D8' никогда не сработает.

>Проверял
>sizeof(buffer) = 2
>strlen(buffer) = 13, 1, 0 - значения меняются. Может из-за этого?

А strlen()ить двоичные данные не слишком разумно.
Можно и SIGSEGV в награду получить.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Заголовков в файле меньше, чем надо" 
Сообщение от victorddt emailИскать по авторуВ закладки(??) on 09-Фев-05, 11:07  (MSK)

>Пример (в хексах):
>       0A FF D8 1E
>На первом шаге вышеприведённый алгоритм
>ухватит '0A FF', на втором - 'D8 1E'.
>Проверка на 'FF D8' никогда не сработает.
>
>>Проверял
>>sizeof(buffer) = 2
>>strlen(buffer) = 13, 1, 0 - значения меняются. Может из-за этого?
>
>А strlen()ить двоичные данные не слишком разумно.
>Можно и SIGSEGV в награду получить.


Блин, так оно и было!
Спасибо тебе большое :)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру