- Как узнать что за символ? (предыдущую не считать) - ошибся в..., karasiov, 12:47 , 07-Фев-05 (1)
>Читаю из бинарного файла: >act_read=fread(buffer,1,BSIZE,in); > >Как можно узнать что кладется в buffer? >Обычный printf(); не дает ничего хорошего:( Да, наверно и не должен :) > > >Спасибо. man freadNAME 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. Вы точно читаете УКАЗАТЕЛЬ?
- Как узнать что за символ?, victorddt, 13:50 , 07-Фев-05 (2)
>>Читаю из бинарного файла: >>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 узнать его шестнадцатеричное предстваление?
- Как узнать что за символ?, karasiov, 14:04 , 07-Фев-05 (3)
>>>Читаю из бинарного файла: >>>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 узнать его шестнадцатеричное предстваление? Сразу так ничего и не придумать. Можно попробовать двоичные маски и смотреть на результаты.
- Как узнать что за символ?, Android, 14:27 , 07-Фев-05 (4)
>>>>Читаю из бинарного файла: >>>>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)) //Делать что-то - Как узнать что за символ?, victorddt, 14:28 , 07-Фев-05 (5)
>Сразу так ничего и не придумать. Можно попробовать двоичные маски и смотреть >на результаты. #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 &
- Как узнать что за символ?, Alexander S. Salieff, 20:57 , 07-Фев-05 (6)
> 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 && ...)" Про ошибки сегментации я писал тебе в другом треде.
|