gpt4 book ai didi

c - jpg 格式不正确,混合了多个图像。谁能告诉我怎么了 ?“RECOVER”

转载 作者:太空宇宙 更新时间:2023-11-03 23:58:07 26 4
gpt4 key购买 nike

我正在研究 CS50 的 PSET3 恢复。我有一个“card.raw”文件,其中 jpg 在第一个之后依次排列。

练习的目标是“通过每次扫描 512 个字节并检查它是否是 jpg 的开始找到第一个 jpg 然后将下一个字节添加到文件直到找到下一个 jpg 开始,然后打开另一个文件并重复直到文件结尾”。

图像生成不正确,我不确定我的问题出在下面的代码中。

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>

int main(int argc, char *argv[])
{
//check if program argument count is correct
if ( argc != 2)
{
fprintf(stderr,"Usage: ./recover image\n");
return(1);
}

char *infile = argv[1]; //Remember file name

//open file for reading
FILE *inptr = fopen(infile,"r");
if (inptr == NULL)
{
fprintf(stderr, "Could not open %s.\n", infile);
return(2);
}

typedef uint8_t BYTE; //new name BYTE

BYTE buffer[512]; // temporary storage

int counter = 0; // image counter

while (fread(buffer, 512, 1, inptr) == 1)
{
if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0)
{
char filename[8];

start:
sprintf(filename,"%03i.jpg", counter);
FILE *outptr = fopen(filename,"w");
fwrite(buffer, 512, 1,outptr);

//check next byte
while (fread(buffer, 512, 1, inptr) == 1)
{
if (buffer[0] != 0xff && buffer[1] != 0xd8 && buffer[2] != 0xff && (buffer[3] & 0xf0) != 0xe0)
{
fwrite(buffer, 512, 1,outptr);
printf("%i",counter);
}

//if next file starts
if(buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0)
{
counter++;
printf("%i",counter);
fclose(outptr);
goto start;
}
}
if (counter > 1)
{
fclose(outptr);
}
}
}
fclose(inptr);
}

最佳答案

本来可以写出更好的代码,但如果它只是关于逻辑的话

if (buffer[0] != 0xff && buffer[1] != 0xd8 && buffer[2] != 0xff && (buffer[3] & 0xf0) != 0xe0)
{
fwrite(buffer, 512, 1,outptr);
printf("%i",counter);
}

这是错误的,应该是

if (!(buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xf0) == 0xe0))
{
fwrite(buffer, 512, 1,outptr);
printf("%i",counter);
}

因为前一个也忽略了 jpg 的任何部分,前 4 个字节中的一个或多个等于 IMG 的开始但不是全部。谢谢大家的帮助。

关于c - jpg 格式不正确,混合了多个图像。谁能告诉我怎么了 ?“RECOVER”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56955820/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com