我正在尝试遍历 .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 到 header,然后在 gdb 中打印 header,我会得到疯狂的垃圾值,并且 do-while 变成一个无限循环。我不知道发生了什么。谢谢。