PSET4 RECOVERY 无法正确恢复图像
PSET4 RECOVERY does not recover images correctly
我已经开始研究 PSET 4 恢复。我的程序编译成功,前 3 次测试没问题,但看在我的份上,我似乎找不到问题所在。
它只是不能正确恢复照片,我尝试将 ptr 更改为 char,反之亦然,但无济于事。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
typedef uint8_t BYTE;
int main(int argc, char *argv[])
{
//check for number of arguments
if (argc != 2)
{
printf("Usage: ./recover filename\n");
return 1;
}
//initialize files
char *input_name = argv[1];
FILE *input = fopen(input_name, "r");
if (input == NULL)
{
//check if file is openable
printf("File %s could not be opened!", input_name);
return 1;
}
//initialize files and pointers
BYTE file[512];
int counter = 0;
FILE *img = NULL;
char img_name[8];
//loop as long as files returns bytes
while(fread(&file, 512, 1, input) == 1)
{
//check if file is jpeg
if (file[0] == 0xff && file[1] == 0xd8 && file[2] == 0xff && (file[3] & 0xf0) == 0xe0)
{
//if a previous file is open, close it
if (counter != 0)
fclose(img);
}
//initialize new file
sprintf(img_name, "%03i.jpg", counter);
img = fopen(img_name, "w");
counter++;
//if jpeg is found, write
if (counter != 0)
{
fwrite(&file, 512, 1, img);
}
}
fclose(input);
fclose(img);
return 0;
感谢任何帮助
因此,您已进行此检查以查看是否找到了新图像的开头。如果你找到一张新图片,你想打开它。但是看看那个分支结束的地方。您检查它是否是新图像的开始,然后检查图像是否需要关闭。然后你结束两个分支。每次循环运行时,您无条件地打开一个新图像。整个错误是花括号的位置。
//check if file is jpeg
if (file[0] == 0xff && file[1] == 0xd8 && file[2] == 0xff && (file[3] & 0xf0) == 0xe0)
{
//if a previous file is open, close it
if (counter != 0)
fclose(img);
} // <- !! what !!
//initialize new file
sprintf(img_name, "%03i.jpg", counter);
img = fopen(img_name, "w");
counter++;
//if jpeg is found, write
我已经开始研究 PSET 4 恢复。我的程序编译成功,前 3 次测试没问题,但看在我的份上,我似乎找不到问题所在。 它只是不能正确恢复照片,我尝试将 ptr 更改为 char,反之亦然,但无济于事。
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
typedef uint8_t BYTE;
int main(int argc, char *argv[])
{
//check for number of arguments
if (argc != 2)
{
printf("Usage: ./recover filename\n");
return 1;
}
//initialize files
char *input_name = argv[1];
FILE *input = fopen(input_name, "r");
if (input == NULL)
{
//check if file is openable
printf("File %s could not be opened!", input_name);
return 1;
}
//initialize files and pointers
BYTE file[512];
int counter = 0;
FILE *img = NULL;
char img_name[8];
//loop as long as files returns bytes
while(fread(&file, 512, 1, input) == 1)
{
//check if file is jpeg
if (file[0] == 0xff && file[1] == 0xd8 && file[2] == 0xff && (file[3] & 0xf0) == 0xe0)
{
//if a previous file is open, close it
if (counter != 0)
fclose(img);
}
//initialize new file
sprintf(img_name, "%03i.jpg", counter);
img = fopen(img_name, "w");
counter++;
//if jpeg is found, write
if (counter != 0)
{
fwrite(&file, 512, 1, img);
}
}
fclose(input);
fclose(img);
return 0;
感谢任何帮助
因此,您已进行此检查以查看是否找到了新图像的开头。如果你找到一张新图片,你想打开它。但是看看那个分支结束的地方。您检查它是否是新图像的开始,然后检查图像是否需要关闭。然后你结束两个分支。每次循环运行时,您无条件地打开一个新图像。整个错误是花括号的位置。
//check if file is jpeg
if (file[0] == 0xff && file[1] == 0xd8 && file[2] == 0xff && (file[3] & 0xf0) == 0xe0)
{
//if a previous file is open, close it
if (counter != 0)
fclose(img);
} // <- !! what !!
//initialize new file
sprintf(img_name, "%03i.jpg", counter);
img = fopen(img_name, "w");
counter++;
//if jpeg is found, write