Read a file as byte array

alissonlacerda picture alissonlacerda · Feb 27, 2014 · Viewed 77.3k times · Source

I have an assignment for coding a Huffman algorithm. I have the whole problem organized in my head, but I'm having some trouble with file handling.

The problem is: the algorithm is supposed to compress ANY kind of file.

My solution: read the file as a byte array, then with an int array[256]={0} for each byte, get it's int n corresponding value and increment the array[n]. If I didn't make it clear, let me know.

So, I've done lots of researching, but don't understand how to get bytes from ANY kind of file and how to handle them.

Answer

user1274193 picture user1274193 · Feb 27, 2014
FILE *fileptr;
char *buffer;
long filelen;

fileptr = fopen("myfile.txt", "rb");  // Open the file in binary mode
fseek(fileptr, 0, SEEK_END);          // Jump to the end of the file
filelen = ftell(fileptr);             // Get the current byte offset in the file
rewind(fileptr);                      // Jump back to the beginning of the file

buffer = (char *)malloc(filelen * sizeof(char)); // Enough memory for the file
fread(buffer, filelen, 1, fileptr); // Read in the entire file
fclose(fileptr); // Close the file

Now you have an array of bytes containing the file's contents.