I'm really confused.
I reviewed all similar problems, but did find my case.
It seems like jpeg start bytes are detected, but wrong data inserts to the output file.
Please advise!
24-Oct-2016: The code is updated
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
int main(void)
{
// open input file
FILE* inptr = fopen("card.raw", "r");
if (inptr == NULL)
{
printf("Could not open card.raw.\n");
return 2;
}
FILE* outptr = 0;
uint8_t temp [512];
char outfile [8];
int namenumber = 0;
for (int i = 0; feof(inptr) == 0; i++ )
{
//check if it isn't EOF
if (fread(&temp, 512, 1, inptr) != 1) break;
//read input file
fread(&temp, 512, 1, inptr);
//determine if there is jpeg starting bytes
if (temp[0] == 0xff && temp[1] == 0xd8 && temp[2]==0xff && (temp[3] >= 0xe0 || temp[3] <= 0xef) )
{
//close previously opened outputfile
if(namenumber != 0)
{
fclose(outptr);
}
//naming the output files
sprintf(outfile, "%03d.jpg", namenumber);
namenumber++;
//open output file and check if it opens successfully
outptr = fopen(outfile, "w");
if (outptr == NULL)
{
fclose(inptr);
printf("Could not create %s.\n", outfile);
return 3;
}
fwrite(&temp, 512, 1, outptr);
}
//check if exists opened file
else if (namenumber !=0 )
{
//write data to output file
fwrite(&temp, 512, 1, outptr);
}
}
// close infile
fclose(inptr);
if(namenumber != 0)
{
fclose(outptr);
}
// that's all folks
return 0;
}