The OpenNET Project / Index page

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




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Как узнать что за символ? (предыдущую не считать) - ошибся в теме :\, !*! victorddt, 07-Фев-05, 11:05  [смотреть все]
Читаю из бинарного файла:
act_read=fread(buffer,1,BSIZE,in);

Как можно узнать что кладется в buffer?
Обычный printf(); не дает ничего хорошего:( Да, наверно и не должен :)

Спасибо.

  • Как узнать что за символ? (предыдущую не считать) - ошибся в..., !*! karasiov, 12:47 , 07-Фев-05 (1)
    >Читаю из бинарного файла:
    >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.

    Вы точно читаете УКАЗАТЕЛЬ?


    • Как узнать что за символ?, !*! 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 && ...)"
            Про ошибки сегментации я писал тебе в другом треде.




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

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