I've been stuck for days with this problem. My recover program creates 50 jpgs but none of them show.
When I look at the first 4 bytes of each, bytes 2 - 4 are correct for JPG signature.
But byte 1 is always 0 instead of 0xff. I don't understand how this could be happening. What am I missing??? Thank you for suggestions!
int main(void)
{
//open raw data file
FILE* rawfile = fopen("card.raw", "r");
// buffer to hold 512 bytes from fread
typedef uint8_t BYTE;
BYTE buffer[512];
char title[7];
FILE* img = NULL;
int search = 0;
int picnumber = 0;
while (feof (rawfile) == 0)
{
fread(&buffer, 512, 1, rawfile);
//check for next jpeg signature
if (buffer[0] == 0xff && buffer [1] == 0xd8 && buffer [2] == 0xff && (buffer [3] >> 4) == 0xe)
{
//close current
if ( search > 0)
{
fclose(img);
}
//open new JPG and how to display file name
sprintf(title, "%03d.jpg", picnumber);
img = fopen(title, "a" );
//write from buffer to new jpg,
fwrite(&buffer, 512, 1, img);
picnumber++;
search = 1;
}
else if (search > 0)
{
fwrite(&buffer, 512, 1, img);
}
}
}