4

嗨,我正在尝试在原始文件中查找 jpeg

我被告知每个 jpeg 的开头都以
- 0xff 0xd8 0xff 0xe0
- 0xff 0xd8 0xff 0xe1 开头

所以我这样做:

// open input file 
FILE* inptr = fopen("card.raw", "r");

// create an array to hold info read from the memory card
char buffer[512];


int counter=0;
int counter2=0;


while ((fread(buffer, sizeof(char), 512, inptr)!=0))
{

    if(buffer[0]==0xff)
    {
        counter++;
        printf("%2d - Found a jpeg!\n", counter);

    }

    else 
    {   
        //Just to test
        counter2++;
        printf("%2d - Nothing Found!\n", counter2);
    }
}

但即使我确信那里有一些图像,程序也没有找到任何东西。提前感谢您的建议。

4

2 回答 2

3

找到了答案!!,我需要像这样将缓冲区声明为无符号字符:

unsigned char buffer[512];
于 2012-10-18T20:40:05.647 回答
0

是的,unsigned char 在这种情况下更自然,但是如果您想继续使用signed char(简单的“char”可能会或可能不会根据环境进行签名,最好是明确的),那么,而不是使用 0xff,您可以与 -1 进行比较:

if(buffer[0]==-1)

也就是说,我可能会对整个文件进行一次mmap编辑,然后遍历分配的内存。

最后,由于您不仅要查找 0xff,而且要查找指示 JPEG 开始的整个序列,请使用memmem()搜索 mmap-ed 区域中的整个序列。这样做还可以处理 JPG 文件不是从 512 块的开头开始的可能性。

于 2012-10-18T21:04:01.460 回答