-
-
Save Rudy996/2dc7755af71b07ae9c6412aee02478d0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cs50.h> | |
#include <cs50.c> | |
#include <stdio.h> | |
#include <stdlib.h> | |
#define BUFFER_SIZE 512 | |
int main(void) | |
{ | |
// open memory card file | |
FILE* input = fopen("card.raw", "r"); | |
if (input == NULL) | |
{ | |
printf("Could not open card.raw.\n"); | |
return 2; | |
} | |
// create buffer | |
unsigned char buffer[BUFFER_SIZE]; | |
// filename counter | |
int filecount = 0; | |
FILE* picture = NULL; | |
// check if we've found a jpeg yet or not | |
int jpg_found = 0; //false | |
// go through cardfile until there aren't any blocks left | |
while (fread(buffer, BUFFER_SIZE, 1, input) == 1) | |
{ | |
// read first 4 bytes of buffer and see if jpg signature using bitwise on last byte | |
if (buffer[0] == 0xff && buffer[1] == 0xd8 && buffer[2] == 0xff && (buffer[3] & 0xe0) == 0xe0) | |
{ | |
if (jpg_found == 1) | |
{ | |
// We found the start of a new pic so close out current picture | |
fclose(picture); | |
} | |
else | |
{ | |
// jpg discovered and now we have the green light to write | |
jpg_found = 1; | |
} | |
char filename[8]; | |
sprintf(filename, "%03d.jpg", filecount); | |
picture = fopen(filename, "a"); | |
filecount++; | |
} | |
if (jpg_found == 1) | |
{ | |
// write 512 bytes to file once we start finding jpgs | |
fwrite(&buffer, BUFFER_SIZE, 1, picture); | |
} | |
} | |
// close files | |
fclose(input); | |
fclose(picture); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment