Created
July 7, 2016 16:50
-
-
Save CraigRodrigues/8f831e9ea1003d9ad14f608d24cc1ba3 to your computer and use it in GitHub Desktop.
CS50 pset4 - "Recover"
This file contains hidden or 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
/** | |
* recover.c | |
* | |
* Computer Science 50 | |
* Problem Set 4 | |
* | |
* Recovers JPEGs from a forensic image. | |
*/ | |
#include <cs50.h> | |
#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
it is useless since the buffer array is already a pointer holding the address of the first element in it