The OpenNET Project / Index page

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

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

"Как узнать что за символ? (предыдущую не считать) - ошибся в..." 
Сообщение от victorddt emailИскать по авторуВ закладки(ok) on 07-Фев-05, 11:05  (MSK)
Читаю из бинарного файла:
act_read=fread(buffer,1,BSIZE,in);

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

Спасибо.

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

 Оглавление

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

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

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


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

2. "Как узнать что за символ?" 
Сообщение от victorddt emailИскать по авторуВ закладки(ok) on 07-Фев-05, 13:50  (MSK)
>>Читаю из бинарного файла:
>>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 узнать его шестнадцатеричное предстваление?

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

3. "Как узнать что за символ?" 
Сообщение от karasiov emailИскать по авторуВ закладки(??) on 07-Фев-05, 14:04  (MSK)
>>>Читаю из бинарного файла:
>>>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 узнать его шестнадцатеричное предстваление?

Сразу так ничего и не придумать. Можно попробовать двоичные маски и смотреть на результаты.


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

4. "Как узнать что за символ?" 
Сообщение от Android Искать по авторуВ закладки(??) on 07-Фев-05, 14:27  (MSK)
>>>>Читаю из бинарного файла:
>>>>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))
//Делать что-то

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

5. "Как узнать что за символ?" 
Сообщение от victorddt emailИскать по авторуВ закладки(??) on 07-Фев-05, 14:28  (MSK)
>Сразу так ничего и не придумать. Можно попробовать двоичные маски и смотреть
>на результаты.


#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 &

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

6. "Как узнать что за символ?" 
Сообщение от Alexander S. Salieff emailИскать по авторуВ закладки on 07-Фев-05, 20:57  (MSK)
> 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 && ...)"
Про ошибки сегментации я писал тебе в другом треде.

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


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

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




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

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