Я недавно пытаюсь решить проблему с cs50 pset4 recovery. Речь идет о восстановлении изображений jpeg из необработанного файла. Проблема в том, что я могу получить изображение, но мои изображения возвращаются поврежденными. Другими словами, я хочу записать 512 байтов в каждый JPEG, но мои результирующие файлы JPEG имеют размер всего 1 байт. пожалуйста, помогите мне проверить мои коды и оптимизировать.
может извлекать изображения и просматривать
, но не исправлять содержимое и поврежденные
ожидает 512 байт каждый, но только 1 байт
#include <stdio.h>
#include <stdlib.h>
#include <cs50.h>
#include <string.h>
#include <stdint.h>
#define MAX_SIZE 512
int main(int argc, char *argv[])
{
typedef uint8_t BYTE;
BYTE bufferRead[MAX_SIZE];
char name[8];
// Check usage
if (argc != 2)
{
printf("Usage: ./recover image");
return 1;
}
// Open file
FILE *file = fopen(argv[1], "r");
if (!file)
{
return 1;
}
FILE* img=NULL;
int i=0;
while(fread(bufferRead,512, 1, file))
{
// Check first four bytes
if (bufferRead[0] == 0xff && bufferRead[1] == 0xd8 && bufferRead[2] == 0xff && ((bufferRead[3]&0xf0) == 0xe0))
{
sprintf(name, "%03i.jpg",i);
img=fopen(name,"w");
if(img == NULL)
{
return 1;
}
fwrite(bufferRead,512,1, img);
//close the file
fclose(img);
i++;
}
}
// Close file
fclose(file);
}
fwrite
находится в предложении if, что означает, что он будет записывать только первый блок изображения jpeg, с которого начинается подпись, но не остальные. Вы должны переместитьfwrite
за пределы предложения if. - person Enis Arik   schedule 28.12.2020