Читаю из бинарного файла:
act_read=fread(buffer,1,BSIZE,in);Как можно узнать что кладется в buffer?
Обычный printf(); не дает ничего хорошего:( Да, наверно и не должен :)Спасибо.
>Читаю из бинарного файла:
>act_read=fread(buffer,1,BSIZE,in);
>
>Как можно узнать что кладется в buffer?
>Обычный printf(); не дает ничего хорошего:( Да, наверно и не должен :)
>
>
>Спасибо.
man freadNAME
fread, fwrite - binary stream input/outputSYNOPSIS
#include <stdio.h>size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
<skip>
DESCRIPTION
The function fread reads nmemb elements of data, each size bytes long,
from the stream pointed to by stream, storing them at the location
given by ptr.Вы точно читаете УКАЗАТЕЛЬ?
>>Читаю из бинарного файла:
>>act_read=fread(buffer,1,BSIZE,in);
>>
>>Как можно узнать что кладется в buffer?
>>Обычный printf(); не дает ничего хорошего:( Да, наверно и не должен :)
>>
>>
>>Спасибо.
>man fread
>
>NAME
>fread, fwrite - binary stream input/output
>
>SYNOPSIS
>#include <stdio.h>
>
>size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
><skip>
>DESCRIPTION
>The function fread reads nmemb elements of data, each size bytes
>long,
>from the stream pointed to by stream,
>storing them at the location
>given by ptr.
>
>Вы точно читаете УКАЗАТЕЛЬ?
Вот фрагмет файла:
╪ р
CVS_NT-DATA █
4"@.0&4LCPOKCIHT^yfTYrZHIiПjr|АЗИЗQeФЯУГЭyДЗВ █
%&'()Он не текстовый (допустим картинка).
Мне нужно перебрать по байтам (или по 4 байта - неважно). При встрече определенной комбинации байтов, например: FF D8 FF E0 что-либо делать.Так вот как просматривая каждый раз buffer узнать его шестнадцатеричное предстваление?
>>>Читаю из бинарного файла:
>>>act_read=fread(buffer,1,BSIZE,in);
>>>
>>>Как можно узнать что кладется в buffer?
>>>Обычный printf(); не дает ничего хорошего:( Да, наверно и не должен :)
>>>
>>>
>>>Спасибо.
>>man fread
>>
>>NAME
>>fread, fwrite - binary stream input/output
>>
>>SYNOPSIS
>>#include <stdio.h>
>>
>>size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
>><skip>
>>DESCRIPTION
>>The function fread reads nmemb elements of data, each size bytes
>>long,
>>from the stream pointed to by stream,
>>storing them at the location
>>given by ptr.
>>
>>Вы точно читаете УКАЗАТЕЛЬ?
>
>
>Вот фрагмет файла:
> ╪ р
>CVS_NT-DATA █
>4"@.0&4LCPOKCIHT^yfTYrZHIiПjr|АЗИЗQeФЯУГЭyДЗВ █
>
>%&'()
>
>Он не текстовый (допустим картинка).
>Мне нужно перебрать по байтам (или по 4 байта - неважно). При
>встрече определенной комбинации байтов, например: FF D8 FF E0 что-либо делать.
>
>
>Так вот как просматривая каждый раз buffer узнать его шестнадцатеричное предстваление?Сразу так ничего и не придумать. Можно попробовать двоичные маски и смотреть на результаты.
>>>>Читаю из бинарного файла:
>>>>act_read=fread(buffer,1,BSIZE,in);
>>>>
>>>>Как можно узнать что кладется в buffer?
>>>>Обычный printf(); не дает ничего хорошего:( Да, наверно и не должен :)
>>>>
>>>>
>>>>Спасибо.
>>>man fread
>>>
>>>NAME
>>>fread, fwrite - binary stream input/output
>>>
>>>SYNOPSIS
>>>#include <stdio.h>
>>>
>>>size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
>>><skip>
>>>DESCRIPTION
>>>The function fread reads nmemb elements of data, each size bytes
>>>long,
>>>from the stream pointed to by stream,
>>>storing them at the location
>>>given by ptr.
>>>
>>>Вы точно читаете УКАЗАТЕЛЬ?
>>
>>
>>Вот фрагмет файла:
>> ╪ р
>>CVS_NT-DATA █
>>4"@.0&4LCPOKCIHT^yfTYrZHIiПjr|АЗИЗQeФЯУГЭyДЗВ █
>>
>>%&'()
>>
>>Он не текстовый (допустим картинка).
>>Мне нужно перебрать по байтам (или по 4 байта - неважно). При
>>встрече определенной комбинации байтов, например: FF D8 FF E0 что-либо делать.
>>
>>
>>Так вот как просматривая каждый раз buffer узнать его шестнадцатеричное предстваление?
>
>Сразу так ничего и не придумать. Можно попробовать двоичные маски и смотреть
>на результаты.Вывести на экран буффер можно так:
for(unsigned i=0;i<buff_size;i++)
printf("%x\n",(int)buff[i]);
А проверить на соответствие комбинации можно простым сравнением:
for(unsigned i=0;i<buff_size-3;i++)
if((buff[i]==0xF0)&&(buff[i+1]==0xFE)&&(buff[i+2]==0xD0)&&(buff[i+3]==0xEF))
//Делать что-то
>Сразу так ничего и не придумать. Можно попробовать двоичные маски и смотреть
>на результаты.
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>#define BSIZE 1
int main()
{
FILE *in, *out;
char *buffer[BSIZE], mask;
int act_read;
mask = 0xD9;in=fopen("1.JPG","rb");
out=fopen("1_1.JPG","wb");do
{
act_read=fread(*buffer,1,BSIZE,in);
if(buffer & mask) /* ---ссылается сюда--- */
{
printf("AAAAA\n");
}fwrite(*buffer,1,act_read,out);
}while (act_read == BSIZE);
fclose(in);
fclose(out);
}Выдается ошибка:
invalid operands to binary &
> char *buffer[BSIZE], mask;
> mask = 0xD9;
>
> if(buffer & mask) /* ---ссылается сюда--- */>Выдается ошибка:
>invalid operands to binary &
Ну епт, почитай ты про типы, массивы и указатели. Не буду тебе пересказывать абзацы из букварей, просто скажу что лексема buffer в твоем случае это переменная типа char **, а mask - переменная типа char. И каким раком ты собираешься скрещивать их в бинарном AND, абсолютно неясно ни мне, ни компилятору. Потом, у меня есть явное подозрение, что ты плохо понимаешь разницу между "&" и "&&" (а она немалая), и врядли понимаешь смысл вот этого вот "if(buffer & mask)", которое тебе выдаст не равенство маске, а соответствие единичных битов в соответствующих позициях аргументов. Подозреваю, что, скорее всего, ты имел ввиду (соответствуя объявлениям твоих segfault'ных указателей ;) "if(*buffer[0]==mask && ...)"
Про ошибки сегментации я писал тебе в другом треде.