问题是从.raw文件中恢复一些JPG。
当我运行check50时,我得到了#34;恢复了img不匹配"。
:)
recover.c存在。
:)
recover.c编译。
:)
处理缺乏法医形象的问题
:(
正确恢复000.jpg
恢复的图像不匹配
:(
正确恢复中间图像 -
恢复的图像不匹配
:(
正确恢复015.jpg
找不到015.jpg
我真的很努力地发现问题所在,每次我都无法确定问题所在,我希望有人可以给我一些建议。
#include <stdio.h>
#include <stdint.h>
int main(int argc, char *argv[]){
if(argc != 2){
fprintf(stderr, "Usage: ./recover image");
return 1;
}
//open file
FILE *inptr = fopen(argv[1], "r");
if (inptr == NULL){
fprintf(stderr, "Could not open %s.\n", argv[1]);
return 2;
}
int foundjpg = 0;
char filename[10];
int x=1;
//repeat until end of the card
while(x == 1){
//buffer
unsigned char buf[512];
x = fread(buf, 512, 1, inptr);
//read into buffer
fread(buf, 512, 1, inptr);
FILE *jpg = fopen(filename, "w");
//start of a new jpg?
if(buf[0]== 0xff && buf[1] == 0xd8 && buf[2] == 0xff && (buf[3] & 0xf0) == 0xe0 ){
if(jpg != NULL){// yes i found before
fclose(jpg);
sprintf(filename, "%03i.jpg" ,foundjpg );
foundjpg++;
jpg = fopen(filename, "w");
}
else{
sprintf(filename, "%03i.jpg" ,foundjpg );
jpg = fopen(filename , "w");
foundjpg++;
}
}
//already found a jpg?
if(jpg != NULL && foundjpg > 0){
fwrite(buf, 1, 512, jpg);
}
}
fclose(inptr);
// success
return 0;
}
答案 0 :(得分:1)
你做事的顺序很混乱,导致错误。例如:
filename
未初始化。foundjpg
,在程序中这意味着第二个图像被称为01.jpg
。所有图像索引都关闭,最后一个丢失。你应该重新组织你的代码,以便它以自然的方式做一件事。该程序可能如下所示:
您必须决定如何处理错误。你是跳过错误的块还是中止程序?
还不清楚所有图像是否都是512字节长,这似乎不太可能。也许您必须从标题中读取实际图像大小,然后复制整个图像。