我正在尝试迭代.raw文件,查找表示jpeg正在启动的4个字节(0xffd8ffe0或0xffd8ffe1):
int junk = fgetc(inptr);
while (junk != 0xff)
if (junk == EOF)
{
printf("Reached end of file.\n");
printf("2\n");
return 2;
}
else
{
junk = fgetc(inptr);
}
一旦找到0xff,我fseek(inptr,-1,SEEK_CUR),然后:
while (feof(inptr) == 0)
{
// declared write file outptr
// write header
char header[4];
do
{
fread(&header, sizeof(char), 4, inptr);
if (header[1-4] are 0xffd8ffe0 or 0xffd8ffe1)
fwrite(&header, 1, 4, outptr);
} while (header[1-4] are not 0xffd8ffe0 or 0xffd8ffe1);
如果我在GDB中并且在while循环开始之前我打印了fgetc(inptr)4次,那么肯定能得到0xffd8ffe0。如果我让do-while循环fwrite到头,然后在gdb中打印头,我得到疯狂的垃圾值,并且do-while变成无限循环。我不知道发生了什么。感谢。
答案 0 :(得分:1)
您的代码可能无法在RAW文件中找到JPEG标头,即使它在那里,如果标头之前的原始部分中有0xff。例如,如果文件包含:
0x00 0xff 0x00 0x00 0xff 0xd8 0xff 0xe0 <JPEG data>
您的代码无法找到标题。
相反,您应该逐字节读取文件(记住最后三个读取字节)并将这些字节与JPEG标头的常量进行比较。