yagami_md Ответов: 3

Предельный байт чтения с языком C


всем привет
у меня есть изображение, я хочу, когда я начинаю читать изображение по файлу в программировании на Си, читать по блоку или предельному числу байтов, определенному ранее , это означает читать предельный байт, например 32 байта , после того как я хочу вычислить вероятность для каждого байта в этом блоке
спасибо

Что я уже пробовал:

Файл *fp=fopen ("image.pgm", " rb")
while (c=fgetc (fp)!=EOF)
{
//читать 32 первый байт
// вычислить вероятность каждого байта
// вернитесь в позицию 32 в файле
}

3 Ответов

Рейтинг:
8

Richard MacCutchan

Это самый простой код для чтения файла

unsigned char buffer[64];	// buffer may be any size
FILE *fp = fopen("image.pgm", "rb");
int numread;

while (!feof(fp))  // repeat until reached end of file
{
    int index;	// index into the buffer
    numread = fread(buffer, sizeof(unsigned char), 64, fp);
    if (numread == 0)
        break;  // no data left to read
    for (index = 0; index < numread; ++index)
    {
        // process each byte of the buffer
        int b = buffer[index];	// b contains the value of the current byte
        printf("byte %d: %d\n", index, b);
    }
}


Рейтинг:
20

Richard MacCutchan

Не использовать fgetc для чтения файлов, особенно двоичных данных. Воспользуйся fread как описано в https://msdn.microsoft.com/en-us/library/kt0etdcs.aspx[^].


yagami_md

Привет друг ...я прекратил свою работу с 2-х месяцев ..я хочу покончить с этим .. пожалуйста, не могли бы вы дать мне, как читать изображение по блоку? например, в файловом потоке я хотел бы читать 64 байта за байтом !!! спасибо

Richard MacCutchan

Перейдите по ссылке, которую я вам дал, она точно показывает, как это сделать.

yagami_md

пожалуйста друг я bgenner на языке c мне нужна помощь
вот что я хочу сделать
файловый поток ;

Файл *stream1;

трансляция= с помощью функции fopen(параметр pfile, "РБ");

//когда поток все еще байт в потоке

делать

{

numread = fread( stream1, sizeof( char ), 64, stream );

// обработайте поток 1

}

Richard MacCutchan

Я дал вам помощь-идите и прочитайте информацию по этой ссылке. Нет смысла повторять то, что уже предусмотрено.

yagami_md

я копирую весь файл целиком в буфер ... как я могу читать из буфера?

Richard MacCutchan

Используйте указатель или индекс для доступа к каждому байту. Это базовый язык Си, если вы не понимаете основ, то вернитесь к своим учебным пособиям или попробуйте некоторые из многочисленных онлайн-учебников.

Рейтинг:
1

Patrice T

Вы ничего не сделали, и мы не делаем вашу домашнюю работу.

Ты лучше изучать с должным образом, и последующие страницы tutos:

Язык программирования Си - Википедия, свободная энциклопедия[^]
https://hassanolity.files.wordpress.com/2013/11/the_c_programming_language_2.pdf[^]
http://www.ime.usp.br/~ПФ/Керниган-Ритчи/с-Программирование-электронные книги.формат PDF[^]


yagami_md

спасибо, у каждого есть вопрос уровня, это значит учиться !

Patrice T

2 последние ссылки - это справочник авторов языка Си.
Потратьте время, чтобы прочитать его, оно того стоит.